簡體   English   中英

用於重載控制器方法的相同URL

[英]Same url for overloaded controller methods

在我的web api應用程序中,我想讓客戶端使用相同的路徑發出請求,但是傳遞不同類型的參數。

例如:

public class MyController : ApiController
{
   [HttpDelete]
   public IHttpActionResult Delete(int id) {..}

   [HttpDelete]
   public IHttpActionResult Delete2(Guid id) {..}

   [HttpDelete]
   public IHttpActionResult Delete3(string id) {..}

}

我希望每個方法的url類似,例如:

api/MyController/1
api/MyController/abc etc..

這可能嗎? 我嘗試了很多與ActionName屬性和路由配置的組合,但似乎沒有任何效果。

謝謝

您可以使用屬性路由 例如:

[RoutePrefix("MyController")]
public class MyController : ApiController
{
   [HttpDelete]
   [Route("delete/{id:int}")]
   public IHttpActionResult Delete(int id) {..}

   [HttpDelete]
   [Route("delete/{id:guid}")]
   public IHttpActionResult Delete2(Guid id) {..}

   [HttpDelete]
   [Route("delete/{id:alpha}")]
   public IHttpActionResult       Delete3(string id) {..}

}

如果您這樣做,那么請求網址將是:

http://yoursever/mycontroller/delete/123
http://yoursever/mycontroller/delete/abc
http://yoursever/mycontroller/delete/91c74f8f-d981-4ee1-ba36-3e9416bba202

您需要為每個方法提供具有不同參數類型的Route

[RoutePrefix("api/MyController")]
public class MyController : ApiController
{
   [HttpDelete]
   [Route("{id:int}", Order = 1)]
   public IHttpActionResult Delete(int id) {..}

   [HttpDelete]
   [Route("{id:guid}", Order = 2)]
   public IHttpActionResult Delete2(Guid id) {..}

   [HttpDelete]
   [Route("{id}", Order = 3)]
   public IHttpActionResult Delete3(string id) {..}

}

當然,如果您還沒有啟用屬性路由,則必須啟用
Route屬性的Order屬性可確保以正確的順序檢查路徑模板,以使int值與字符串路徑不匹配。

是的,這是可能的。 嘗試將路線設置為decoration

例:

        [Route("DeleteThis/{id}")]
        [HttpDelete]
        public IHttpActionResult DeleteThis(int id)
        {
            return Ok();
        }

        [Route("NowDeleteThis/{name}")]
        [HttpDelete]
        public IHttpActionResult DeleteThis(string name)
        {
            return Ok();
        }

暫無
暫無

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

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