C# ASP.NET MVC 5路由可选参数

C# ASP.NET MVC 5路由可选参数,c#,asp.net-mvc,routing,asp.net-mvc-routing,C#,Asp.net Mvc,Routing,Asp.net Mvc Routing,我的ApicController中有一个操作,我想从特定链接调用它,所以我创建了这个简单的路由 [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); } 它

我的ApicController中有一个操作,我想从特定链接调用它,所以我创建了这个简单的路由

[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资源。”,“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               
           obj ect to return as 
           `enter code here`Json code
           return Json(myObject);
             }
    
  • 2.首先在控制器上设置前缀

        [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);
             }
         }
    
    希望这将帮助您解决您的问题。谢谢

        [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);
             }
         }
    
       [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);
             }
         }