繁体   English   中英

ASP.NET Web API 2设置控制器路由

[英]ASP.NET Web API 2 Setting Controller Routes

由于无法弄清楚代码中的错误,我整天都在挠头。

首先,我有一个工作的控制器,例如:

namespace MyProject.Controllers {
    [RoutePrefix("api/Account")]
    public class AccountController : ApiController {
        [AllowAnonymous]
        [Route("Register")]
        public async Task<IHttpActionResult> Register(AccountModel model) {
            ...
            return Ok();
        }
    }
}

但是,当我添加新的控制器并引入新的路由时,就会出现问题。

新的控制器如下:

namespace MyProject.Controllers {
    [RoutePrefix("api/Admin")]
    public class AdminController : ApiController {
        [AllowAnonymous]
        [Route("Encrypt")]
        public IHttpActionResult Encrypt(string clientSecret) {
            ...
            return Ok();
        }
    }
}

然后我通过邮递员发出这样的请求:

邮递员要求

不幸的是,返回了一个错误:

{
    "message": "No HTTP resource was found that matches the request URI 'http://localhost/api/admin/encrypt'."
}

我正在使用WebApiConfig.cs定义的默认路由映射配置:

config.MapHttpAttributeRoutes();

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

任何人都可以阐明它吗?


更新

如果以这种方式发送POST请求,则可以成功获取Ok()响应。

在此处输入图片说明

我现在有一个问题。 为什么我只能通过URL传递参数,而不能通过表单对象传递参数?

我建议您更改路由定义:api / {controller} / {action} / {id}
imo的原因是,Web api操作默认为标准接受动词。 然后,您可以以任何方式命名您的api操作方法,仅用相关的accept属性装饰它们。

要使用参数进行调用,请在route属性中包含parameter并添加POST动词,如下所示:

  [Route("Encrypt/{clientSecret}")]
  [HttpPost]
  public IHttpActionResult Encrypt(string clientSecret) {
            ...
            return Ok();
       }

然后调用如下:

 http://localhost/api/admin/encrypt/123456     

但是,post方法的约定没有以下参数:

[Route("Encrypt")]
[HttpPost]
public IHttpActionResult Encrypt() {
            ...
            return Ok();
       }
   }

然后调用如下:

 http://localhost/api/admin/encrypt

如果您不想添加POST动词,则可以使用POST动词为方法添加前缀,如下所示:

public IHttpActionResult PostEncrypt(string clientSecret)

public IHttpActionResult PostEncrypt()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM