簡體   English   中英

ASP.NET MVC 5路由可選參數

[英]ASP.NET MVC 5 routing optional parameters

我在ApiController中有一個Action,我想從一個特定的鏈接調用,所以我創建了這個簡單的路徑

[Route("Rest/GetName/{name}")]
public IHttpActionResult GetName(string name) {
    // cut - code here is trivial but long, I just fill in an object to return as Json code
    return Json(myObject);
}

它工作正常,但我想使參數可選。 根據文檔在路徑中的參數名稱末尾添加一個問題點就足夠了

[Route("Rest/GetName/{name?}")]

這樣,如果我不提供可選參數,我會收到錯誤,所以

.../Rest/GetName/AnyName --> ok
.../Rest/GetName/ --> error (see below)

{“Message”:“找不到與請求URI匹配的HTTP資源' https:// localhost / miApp / Rest / GetName '。”,“MessageDetail”:“在控制器'Rest'上找不到與之匹配的操作請求。”}

Web API需要顯式設置可選值,即使對於可空類型和類也是如此。

使用默認值為可選參數:

[Route("Rest/GetName/{name?}")]
public IHttpActionResult GetName(string name = null) {
    // cut - code here is trivial but long, I just fill in an object to return as Json code
    return Json(myObject);
}

不要忘記路由注冊:

httpConfig.MapHttpAttributeRoutes()

有許多可能的解決方案:

  1. 嘗試可選參數

      [Route("Rest/GetName/{name?}")] public IHttpActionResult GetName(string name = null) { // cut - code here is trivial but long, I just fill in an obj ect to return as `enter code here`Json code return Json(myObject); } 

2. 首先在控制器上設置PreFix

    [RoutePrefix("api/Rest")]
    [Authorize]
    public class RestController : ApiController
    {
         [Route("/GetName/{name}")]
         public IHttpActionResult GetName(string name = null) 
         {
         // cut - code here is trivial but long, I just fill in an object
         to  return as Json code
         return Json(myObject);
         }
     }

3. 在路徑中的動作名稱之前寫入參數

   [RoutePrefix("api/Rest")]
    [Authorize]
    public class RestController : ApiController
    {
         [Route("{name}/GetName")]
         public IHttpActionResult GetName(string name = null) 
         {
         // cut - code here is trivial but long, I just fill in an object
         to  return as Json code
         return Json(myObject);
         }
     }

希望這可以幫助您解決問題。謝謝

暫無
暫無

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

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