Asp.net web api 防止web api回落到;默认获取";路线
我将属性路由与以下路由一起使用:Asp.net web api 防止web api回落到;默认获取";路线,asp.net-web-api,attributerouting,Asp.net Web Api,Attributerouting,我将属性路由与以下路由一起使用: [RoutePrefix("api/books/{id}")] public BooksController : ApiController { [Route("")] public IHttpActionResult GetByTitle(int id,string title); [Route("")] public IHttpActionResult GetByTitleAuthorIsbn(int id,string t
[RoutePrefix("api/books/{id}")]
public BooksController : ApiController
{
[Route("")]
public IHttpActionResult GetByTitle(int id,string title);
[Route("")]
public IHttpActionResult GetByTitleAuthorIsbn(int id,string title, string author, string isbn);
}
如果用户选择此路线:
GET api/boos/1?title=abc&author=xyz
然后WebAPI将这个url路由到默认的GET方法,即
public IHttpActionResult GetByTitle(int id,string title);
我希望在上述场景中返回404,因为api没有接受标题和作者的路由
建议的两个解决方案是在路线中添加参数,以便
[RoutePrefix("api/books/{id}")]
public BooksController : ApiController
{
[Route("{title}")]
public IHttpActionResult GetByTitle(int id,string title);
[Route("{title}/{author/{isbn}}")]
public IHttpActionResult GetByTitleAuthorIsbn(int id,string title, string author, string isbn);
}
[RoutePrefix("api/books/{id}")]
public BooksController : ApiController
{
[Route("byTitle")]
public IHttpActionResult GetByTitle(int id,string title);
[Route("byTitleAuthorIsbn")]
public IHttpActionResult GetByTitleAuthorIsbn(int id,string title, string author, string isbn);
}
另一个解决方案是在路由中添加方法名称,以便
[RoutePrefix("api/books/{id}")]
public BooksController : ApiController
{
[Route("{title}")]
public IHttpActionResult GetByTitle(int id,string title);
[Route("{title}/{author/{isbn}}")]
public IHttpActionResult GetByTitleAuthorIsbn(int id,string title, string author, string isbn);
}
[RoutePrefix("api/books/{id}")]
public BooksController : ApiController
{
[Route("byTitle")]
public IHttpActionResult GetByTitle(int id,string title);
[Route("byTitleAuthorIsbn")]
public IHttpActionResult GetByTitleAuthorIsbn(int id,string title, string author, string isbn);
}
我想知道是否有另一种解决方案,因为我不喜欢用额外的路由参数或在路由中添加方法名来“污染”路由
请注意,将这两种方法结合在一种方法中并不是我要寻找的解决方案。这两条路线必须保持两条单独的路线
我在这里展示的例子是关于书籍的,但它可以应用于任何东西,所以我说书籍只是为了论证 更新:
这个问题不是重复的,因为我已经在我的问题中包含了答案。我正在寻找更多的选择。我认为你需要重新考虑你的url结构。为什么
GetByTitle
,同时提供一个id
?我在这里展示的示例是关于书籍的,但它可以应用于任何东西,所以我说书籍只是为了论证,可能的副本请查看最新更新。您的id
没有任何限制,这意味着它可以是任何东西。但我认为,如果没有大量的定制,你将无法做你想做的事情。