是否可以更改ASP.NET MVC 3路由约束,以便它们返回带有JSON主体的
我正在使用ASP.NET MVC 3平台开发一些REST资源.到目前为止,它非常棒,我喜欢MVC 3的灵活性,使用它构建REST服务也是一件轻而易举的事.我遇到困难的一个领域是Global.asax中的路径限制.首先,他们似乎永远不会正常工作(包括一个ALWAYS返回404,即使输入肯定满足约束的要求……但这是另一个问题).
其次,更重要的是,当约束失败时返回的结果始终是HTML页面.假设约束有效,当这些REST服务的所有使用者都接受数据类型时,例如application / json,text / xml,可能是bson等,结果是HTML确实会引起混乱.我真的需要能够直接解决客户端的错误,而不是简单地将html用于边带解析. 是否可以更改响应路径约束而返回的内容?是否有可能使得返回动态,如果发出请求的客户端只接受application / bson,我们可以生成可接受的响应,而不是简单地生成单个mime类型的预设响应? 解决方法
关于返回代码错误而不是转到控制器,您必须实现自定义RouteHandler.
This link恢复你可以把手指放在一起的所有东西……并且你可以修改这种方式.
关于“调整”返回类型…您可以在控制器中执行此操作.如果在某些情况下你返回Json(…)就足以放入som,在其他情况下你返回View或PartialView. 不过在控制器过滤器中这样做很好…! 我实现了一个Control过滤器,允许控制器与客户端协商返回类型.我很简单……客户端只是在路由参数(一段网址或查询字符串)中声明我想要接收的类型,或者通过发布包含此信息的字段来声明. 代码在这里(它包含客户端提供的“提示”的一些控件,以防止恶意用户的攻击): public class AcceptViewHintAttribute : ActionFilterAttribute { private JsonRequestBehavior jsBehavior; public AcceptViewHintAttribute(JsonRequestBehavior jsBehavior = JsonRequestBehavior.DenyGet) { this.jsBehavior = jsBehavior; } public override void OnActionExecuted(ActionExecutedContext filterContext) { string hint = filterContext.RequestContext.HttpContext.Request.Params["ViewHint"]; if (hint == null) hint = filterContext.RequestContext.RouteData.Values["ViewHint"] as string; if (!string.IsNullOrWhiteSpace(hint) && hint.Length<=100 && new Regex(@"^w+$").IsMatch(hint) ) { ViewResultBase res = filterContext.Result as ViewResultBase; if (res != null) { if (hint == "json") { JsonResult jr = new JsonResult(); jr.Data = res.ViewData.Model; jr.JsonRequestBehavior = jsBehavior; filterContext.Result = jr; } else { res.ViewName = hint; } } } base.OnActionExecuted(filterContext); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 是否可以并行运行iis6和iis7?
- ASP.NET Core 2.0 + EF6 + Linux&nbs
- ASP.NET Core Web API模板中没有单独的用户帐户auth选项
- asp.net-mvc – Asp.net MVC 1和Asp.net MVC 2之间的区别
- asp.net – dotnet运行OR dotnet手表与开发环境从命令行?
- asp.net – 如何使用会员资格提供者与EF代码优先?
- asp.net-mvc-3 – Elmah没有发送电子邮件
- asp.net – 实现自定义成员资格提供程序成员资格用户问题
- asp.net-mvc – automapper,你在哪里放置代码将View Model映
- 制作ASP.Net Web表单的“模式”是什么?
- asp.net-mvc-3 – 无法添加从其他类继承的模型的
- asp.net – TZOFFSETFROM和TZOFFSETTO是什么意思
- .NET Core采用的全新配置系统[8]: 如何实现配置与
- asp.net-mvc – ASP.NET MVC LINQ to SQL或Entit
- asp.net – 在代码而不是数据库中存储salt
- asp.net – 防止TextBox中的特殊字符
- asp.net-web-api – WebApi DelegatingHandler未
- ASP.NET MVC筛选器之特殊筛选器IOverrideFilter
- asp.net – 如何检查IIS是否在32位或64位模式
- asp.net – 如何在Azure应用服务中管理(非SSL)证