如何定义路由中的PUT方法仅限于没有参数的控制器中的Put方法?
以下是WebApiConfig.cs中的路由配置:
config.Routes.MapHttpRoute( name: "DefaultApiPut", routeTemplate: "api/{controller}", defaults: new { httpMethod = new HttpMethodConstraint(HttpMethod.Put) } ); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { httpMethod = new HttpMethodConstraint(HttpMethod.Get, HttpMethod.Post, HttpMethod.Delete) } );
这是我的控制器:
public class MyController : ApiController { [HttpPut] public void Put() { //blah } }
不知何故,当客户端使用URL /api/myController/12345
发出PUT请求时,它仍然映射到MyController
的Put
方法,我预计会出现类似资源的错误。
如何强制Put
方法只接受没有参数的请求?
提前致谢!
您将httpMethod
约束置于defaults
,但它应该在constraints
。
defaults
只是说如果请求不包含部分或全部作为路由参数的默认值(在动词的情况下,这是无意义的,因为每个HTTP请求总是有一个动词作为协议的一部分) 。 constraints
限制将激活路由的路由值的组合,这是您实际尝试执行的操作。
仅供参考,对于这种简单/标准路由,您也不需要API控制器中的[HttpPut]
属性。 这已经由HTTP路由处理,它将动词映射到控制器方法。
这适用于约束路由上的http方法:
public static class WebApiConfig { public static void Register(HttpConfiguration config) { config.Routes.MapHttpRoute( name: "LocationApiPOST", routeTemplate: "api/{orgname}/{fleetname}/vehicle/location", defaults: new { controller = "location" } constraints: new { httpMethod = new HttpMethodConstraint(HttpMethod.Post) } ); config.Routes.MapHttpRoute( name: "LocationApiGET", routeTemplate: "api/{orgname}/{fleetname}/{vehiclename}/location/{start}", defaults: new { controller = "location", start = RouteParameter.Optional } constraints: new { httpMethod = new HttpMethodConstraint(HttpMethod.Get) } ); ... }
- 将json对象发布到ASP MVC无法正常工作
- 由于以下错误,检索具有CLSID的组件的COM类工厂失败:80070005拒绝访问
- 自定义模型Binderinheritance自DefaultModelBinder
- 安装文件的位置 – Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework \ .NETFramework \ v4.5
- 如何处理ASP MVC中的重复表单字段
- MVC中的属性和filter有什么区别
- 三层asp.net mvc应用程序中的dependency injection
- WebAPI上传错误。 MIME多部分流的预期结束。 MIME多部分消息未完成
- 使用Max + 1创建用户友好的唯一序列号的替代方法