首页 > 代码库 > Asp.Net MVC在过滤器中使用模型绑定
Asp.Net MVC在过滤器中使用模型绑定
废话不多话,直接上代码
1、创建MVC项目,新建一个过滤器类以及使用到的实体类:
1 public class DemoFiltersAttribute : AuthorizeAttribute 2 { 3 public override void OnAuthorization(AuthorizationContext filterContext) 4 { 5 var person = new Person(); 6 //过滤器中使用模型绑定 7 BindModel<Person>(filterContext, person); 8 filterContext.Result = new JsonResult() { Data = http://www.mamicode.com/person, JsonRequestBehavior = JsonRequestBehavior.AllowGet }; 9 //base.OnAuthorization(filterContext);10 }11 12 /// <summary>13 /// 模型绑定14 /// </summary>15 /// <typeparam name="TModel"></typeparam>16 /// <param name="model">模型(绑定成功后将会给此赋值)</param>17 /// <param name="prefix">获取或设置在呈现表示绑定到操作参数或模型属性的标记时要使用的前缀</param>18 public void BindModel<TModel>(AuthorizationContext filterContext, TModel model, string prefix = "") where TModel : class19 {20 IModelBinder binder = ModelBinders.Binders.GetBinder(typeof(TModel));21 ModelBindingContext bindingContext = new ModelBindingContext()22 {23 ModelMetadata = http://www.mamicode.com/ModelMetadataProviders.Current.GetMetadataForType(() => model, typeof(TModel)),24 ModelName = prefix,25 ValueProvider = filterContext.Controller.ValueProvider26 };27 binder.BindModel(filterContext.Controller.ControllerContext, bindingContext);28 }29 }
1 public class Person2 {3 public int Id { set; get; }4 public string Name { set; get; }5 }
继承了AuthorizeAttribute类中的OnAuthorization方法会在执行Action之前执行,具体可以查看我写的这篇文章《Asp.Net MVC过滤器》
2、新建一个控制类,并在控制器贴上DemoFilters特性:
1 [DemoFilters]2 public class HomeController : Controller3 {4 // GET: Home5 public ActionResult Index(Person p)6 {7 return Content("123");8 }9 }
3、访问url:
http://localhost:8290/home/index?id=1&name=lisi
输出:{"Id":1,"Name":"lisi"}
Asp.Net MVC在过滤器中使用模型绑定
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。