WebAPI路由:组合属性和HttpConfiguration设置

时间:2016-08-01 12:10:18

标签: c# .net asp.net-web-api

我正在尝试为同一路线设置GETPOST

我注册了以下内容:

  config.MapHttpAttributeRoutes();

  config.Routes.MapHttpRoute(
                name: "MyGetMethod",
                routeTemplate: "api/v1/users/{user}",
                defaults: new
                              {
                                  controller = "Users",
                                  action = "MyGetMethod"
                              },
                constraints: null,
                handler: HttpClientFactory.CreatePipeline(
                    new HttpControllerDispatcher(config),
                    routeHandlerFactory.Create()));

  config.Routes.MapHttpRoute(
                name: "MySetMethod",
                routeTemplate: "api/v1/users/{user}",
                defaults: new
                              {
                                  controller = "Users",
                                  action = "MySetMethod"
                              },
                constraints: null,
                handler: HttpClientFactory.CreatePipeline(
                    new HttpControllerDispatcher(config),
                    routeHandlerFactory.Create()));

我的UsersController.cs包含:

 [HttpPost]
    public HttpResponseMessage MySetMethod(string user)
    {
        return new HttpResponseMessage(HttpStatusCode.NotImplemented);
    }


 [HttpGet]
    public HttpResponseMessage MyGetMethod(string user)
    {
        return new HttpResponseMessage(HttpStatusCode.NotImplemented);
    }

这不起作用。 GET工作正常,但当我使用POST时,WebAPI仍会重定向到GET方法,我收到错误:

  

“消息”:“请求的资源不支持http方法   'POST'。“

如果我注释掉GET方法的注册,则POST可以正常工作。

是因为我在Controller方法中使用属性[HttpPost][HttpGet]而不是将它们标记为constraints

如何在同一条路线上拥有GETPOST

2 个答案:

答案 0 :(得分:0)

如果你使用它将起作用

config.MapHttpAttributeRoutes();

config.Routes.MapHttpRoute(
      name: "DefaultApi",
      routeTemplate: "api/{controller}/{id}",
      defaults: new { id = RouteParameter.Optional }
 );

答案 1 :(得分:0)

您只需为此定义一个 HttpRoute,请尝试以下操作:

 config.Routes.MapHttpRoute(
                name: "UserController",
                routeTemplate: "api/v1/users/{user}",
                defaults: new { user= RouteParameter.Optional }
                handler: HttpClientFactory.CreatePipeline(
                    new HttpControllerDispatcher(config),
                    routeHandlerFactory.Create()));

如果仍然无效,请尝试使用相同的代码,但请将routeTemplate更改为:

routeTemplate: "api/v1/{controller}/{user}"

使用帖子

调用Web方法
https://YourServer/YourVirtualDirectory/api/v1/Users/myUser