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

标签 c# asp.net-mvc routing asp.net-mvc-routing

我的 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);
}

它工作正常,但我想将参数设为可选。根据documentation在路由中的参数名末尾加一个问号点应该就可以了

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

如果我不提供可选参数,这样我会得到一个错误,所以

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

{"Message":"No HTTP resource was found that matches the request URI 'https://localhost/miApp/Rest/GetName'.","MessageDetail":"No action was found on the controller 'Rest' that matches the request."}

最佳答案

Web API 需要显式设置可选值,即使对于可为 null 的类型和类也是如此。

对可选参数使用默认值:

[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()

关于c# - ASP.NET MVC 5 路由可选参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34265248/

相关文章:

typescript - 将类型安全的路由数据传递给 Angular 2 中的路由

c# - 上传到 Azure 网站时 SSL 证书不在 X509Store 中

c# - 创建自定义路由层次结构 ASP.NET MVC 5

c# - 在 C# 中定义具有不同参数的接口(interface)方法

c# - MVC 3 中的输出缓存和替换

asp.net - 页面永远不会加载

routing - 将查询字符串中的参数值映射到DTO属性

c# - C# 规范中引用类型和值类型的轻微混淆

asp.net-mvc - Css 和脚本在用户登录网站之前不起作用 - Asp.NET MVC 3 网站

nginx - Flask 和 nginx 路由