Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net web api 防止web api回落到;默认获取";路线_Asp.net Web Api_Attributerouting - Fatal编程技术网

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
没有任何限制,这意味着它可以是任何东西。但我认为,如果没有大量的定制,你将无法做你想做的事情。