我正在阅读这本书"编程Microsoft ASP.Net MVC" Dino Esposito的第三版。我试图运行下面的例子。
public ActionResult Echo()
{
var data = ValueProvider.GetValue("data").AttemptedValue ?? (ValueProvider.GetValue("today").AttemptedValue ?? String.Empty);
return View();
}
我添加了路由配置如下:
routes.MapRoute(
name: "EchoRoute",
url: "echo/{data}",
defaults: new {controller = "Home", action = "Echo", data = UrlParameter.Optional}
);
现在,如果我尝试使用带有localhost / echo / myName等参数的url,代码可以工作,但是如果我输入一个像localhost / echo这样的查询字符串?today = 02/24/2016我会得到如下异常:
不确定这里到底发生了什么。
答案 0 :(得分:0)
您已将{data}
标记为可选。并且您未在示例网址{data}
中提供/echo?today=02/24/2016
的值。因此,ValueProvider.GetValue("data")
的值为null
。在尝试致电null
之前,您需要检查是否.AttemptedValue
。
您需要对today
执行相同的操作,因为查询字符串值也是可选的。
var data = ValueProvider.GetValue("data") != null ?
ValueProvider.GetValue("data").AttemptedValue :
(ValueProvider.GetValue("today") != null ?
ValueProvider.GetValue("today").AttemptedValue :
String.Empty);
虽然,你可以使用一些if
语句来使代码比这更具可读性。