首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebAPI路由:结合属性和HttpConfiguration设置

WebAPI路由:结合属性和HttpConfiguration设置
EN

Stack Overflow用户
提问于 2016-08-01 12:10:18
回答 2查看 304关注 0票数 3

我正试图为同一条路线拥有一个GET和一个POST

我注册了以下内容:

代码语言:javascript
复制
  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包含:

代码语言:javascript
复制
 [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方法,并得到了错误:

"Message":“请求的资源不支持http方法‘POST’。”

如果我注释掉了GET方法的注册,那么POST就能正常工作。

是不是因为我在Controller方法上使用属性[HttpPost][HttpGet]之间的组合,而不是将它们标记为constraints

我怎么能在同一条路线上有一个GETPOST

EN

回答 2

Stack Overflow用户

发布于 2016-08-01 12:18:45

如果你用这个就行了

代码语言:javascript
复制
config.MapHttpAttributeRoutes();

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

Stack Overflow用户

发布于 2016-08-01 12:39:08

您只需为此定义one HttpRoute,请尝试如下:

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

如果仍然无法工作,请尝试相同的代码,但将routeTemplate更改为:

代码语言:javascript
复制
routeTemplate: "api/v1/{controller}/{user}"

并使用post调用web方法

代码语言:javascript
复制
https://YourServer/YourVirtualDirectory/api/v1/Users/myUser
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38698528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档