簡體   English   中英

WebAPI和屬性路由

[英]WebAPI and Attribute Routing

我似乎找不到此問題的答案,因此將其張貼在這里。 這可能是一個基本的路由問題,也許我只是缺少一些明顯的東西。 我有一個WebAPI2項目,該項目在控制器中具有GetAll()方法。 我正在使用包括RoutePrefix的屬性路由。 當我使用Postman測試該方法時,它可以很好地運行http:// localhost / api / v1 / Suppressions,並且從Mongo DB集合返回JSON列表。 在測試過程中偶然地碰巧進行了測試,並在URL上添加了一個參數,以為我會收到“找不到資源”錯誤http:// localhost / api / v1 / Suppressions?name = abc,但它卻稱為GetAll( ) 方法。

在路由過程中,將忽略參數,並且僅使用URI(當然,除非我有一個專門命名諸如Get(string name)之類的參數的方法)? 如果是這種情況,如果有人不經意地調用了帶有參數或參數列表的方法,是否需要將路由約束添加到我的GetAll()方法中,以引發“找不到資源”錯誤?

除非在Uri中指定查詢參數,否則在路由中將忽略查詢參數。 您可以為“ Suppressions?name = {name}”添加單獨的路由,也可以在現有呼叫中處理該路由。

有關Uri匹配的信息,請參見: UriTemplate.Match

這取決於。

假設您有一種與您描述的方法類似的方法。 例如,

[RoutePrefix("api")]
public class api: ApiController {
    [HttpGet]
    [Route("Supressions")]
    public HttpResponseMessage GetAll(HttpRequestMessage request){
      ///etc
    }
}

無論您使用什么參數,都將調用此方法。

但是,如果您這樣做

[RoutePrefix("api")]
public class api: ApiController {
    [HttpGet]
    [Route("Supressions/{abc}")]
    public HttpResponseMessage Get(HttpRequestMessage request, string abc){
      ///etc
    }
}

您將需要參數。 如果沒有它,而您調用http:// localhost / api / Suppressions ,它將返回類似以下的內容:

{
"message": "No HTTP resource was found that matches the request URI 'http://localhost:64307/api/Suppressions'.",
"messageDetail": "No type was found that matches the controller named ''."
}

現在,當您有多個參數時,您可以執行以下操作,如果您在通話中不使用它們,它也會抱怨

[RoutePrefix("api")]
public class api: ApiController {
    [HttpGet]
    [Route("Supressions")]
    public HttpResponseMessage Get(HttpRequestMessage request, string abc, int id, int somethingElse){
      ///etc
    }
}

這里的調用將是這樣的:

http:// localhost:64307 / api / Suppressions?abc = asdas&id = 13&somethingElse = 45

希望這對您有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM