【发布时间】:2014-11-29 03:27:40
【问题描述】:
我一整天都在摸不着头脑,因为我无法弄清楚我的代码有什么问题。
首先,我有一个这样的控制器:
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();
}
}
}
然后我通过Postman 发出请求,如下所示:
不幸的是,返回错误:
{
"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/account/register”也是一个有效的 POST 请求。
-
你可以试试这条路线 [Route("Encrypt/{clientSecret}")] 并检查它是否有效
-
原来是Parameter Binding 问题。但是,我仍然没有使用 x-www-form 作为我的请求的数据容器。
标签: c# asp.net asp.net-web-api2