C# ValueProvider.GetValue给定异常
我正在读迪诺·埃斯波西托的《微软ASP.NETMVC编程》第三版。我正在尝试运行下面的示例C# ValueProvider.GetValue给定异常,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我正在读迪诺·埃斯波西托的《微软ASP.NETMVC编程》第三版。我正在尝试运行下面的示例 public ActionResult Echo() { var data = ValueProvider.GetValue("data").AttemptedValue ?? (ValueProvider.GetValue("today").AttemptedValue ?? String.Empty); return View(); } 我添加
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,我会得到如下异常:
routes.MapRoute(
name: "EchoRoute",
url: "echo/{data}",
defaults: new {controller = "Home", action = "Echo", data = UrlParameter.Optional}
);
不知道这里到底发生了什么 您已将
{data}
标记为可选。在示例URL/echo?today=02/24/2016
中,您没有为{data}
提供值。因此,ValueProvider.GetValue(“数据”)
的值是null
。在尝试调用.AttemptedValue
之前,需要检查它是否为null
由于查询字符串值也是可选的,因此今天您需要对执行相同的操作
var data = ValueProvider.GetValue("data") != null ?
ValueProvider.GetValue("data").AttemptedValue :
(ValueProvider.GetValue("today") != null ?
ValueProvider.GetValue("today").AttemptedValue :
String.Empty);
尽管如此,您可能会使用一些if
语句来提高代码的可读性。请不要将文本作为图像发布。将错误表复制(或手动写入)为文本。使用短路确保首先检查空对象:空条件运算符:?。这是。除非我个人更喜欢这种方式:var data=ValueProvider?.GetValue(“数据”)?.AttemptedValue??字符串。空;