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