ValueProvider.GetValue给出异常

时间:2016-02-24 20:50:31

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

我正在阅读这本书"编程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我会得到如下异常:

Error screenshot

不确定这里到底发生了什么。

1 个答案:

答案 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语句来使代码比这更具可读性。