繁体   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