[英]What's wrong with my routes
我在webApiConfig
聲明了以下路由。
config.Routes.MapHttpRoute(
name: "DefaultApiWithAction",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
以下是控制器上的路由屬性:
[Route("users")]
public IHttpActionResult Get()
[Route("users/{id}")]
public IHttpActionResult Get(int id)
[AllowAnonymous]
[HttpPost]
[Route("users/validate")]
public IHttpActionResult Validate(string email)
當我打電話給:
〜/ api / users-有效
〜/ api / users / 1-有效
〜/ api / users / validate-失敗...嘗試進入api / users / 1,但由於Post動詞而失敗。
如何設置路由,以便可以在用戶控制器中驗證用戶?
嘗試使用use屬性路由來裝飾validate方法:
http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2
例如
[Route(“ customers / {customerId} / orders”)]
公開IEnumerable GetOrdersByCustomer(int customerId){...}
您不需要注冊“ 定制路由” ,因為您已經擁有“ 屬性路由” 。
從您的代碼中刪除DefaultApiWithAction路由。 相反,您將需要RoutePrefix 。
[RoutePrefix("api/users")]
public class UsersController : ApiController
{
public IHttpActionResult Get()
{
return Ok(new [] {"value1", "value2"});
}
public IHttpActionResult Get(int id)
{
return Ok(id);
}
[HttpPost]
[Route("validate")]
public IHttpActionResult Validate([FromBody]string email)
{
return Ok(email);
}
}
在Chrome瀏覽器中安裝Postman 。 您也可以使用Fiddler或其他一些工具。
http://localhost:XXXXX/api/users/validate
application/json
作為內容類型 "johndoe@example.com"
您尚未啟用屬性路由 。 您已經省略了MapHttpAttributeRoutes
上的HttpConfiguration
。
public static void Register(HttpConfiguration config)
{
// Attribute routing.
config.MapHttpAttributeRoutes();
// Convention-based routing.
config.Routes.MapHttpRoute(
name: "DefaultApiWithAction",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
您還需要確保在ApiController上也正確設置了路由
[RoutePrefix("api/users")]
public class UsersController : ApiController {
//GET api/users
[HttpGet]
[Route("")]
public IHttpActionResult Get() { ... }
//GET api/users/5
[HttpGet]
[Route("{id}")]
public IHttpActionResult Get(int id) { ... }
//POST api/users/validate?email=someone@email.com
[AllowAnonymous]
[HttpPost]
[Route("validate")]
public IHttpActionResult Validate(string email) { ... }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.