0

我在我的多语言项目中实现了 URL 路由,我的链接看起来像这样

1> 使用 URL 路由http://www.example.com/Default.aspx?page=1&Language=en-US 2> 使用 URL 路由http://www.example.com/1/en-US

3> 和第 3 个场景可以是http://www.example.com/Default.aspxhttp://www.example.com

我可以检查查询字符串是否为空或 RouteData 值为空

但在 3 种情况下,我必须检测浏览器默认语言并根据它们重定向它们。

如果我把我的代码写成

if (!string.IsNullOrEmpty(Request["Language"]))
  {
   lang = Request["Language"].ToString();
  }
if (!string.IsNullOrEmpty(HttpContext.Current.Request.RequestContext.RouteData.Values["Language"].ToString()))
 {
    lang = HttpContext.Current.Request.RequestContext.RouteData.Values["Language"].ToString();
 }

如果 Route Data 为空,它会生成以下错误Object reference not set to an instance of an object

我怎样才能让这个语句在没有 try catch 块的情况下处理空异常

HttpContext.Current.Request.RequestContext.RouteData.Values["Language"].ToString();
4

2 回答 2

3

您可以使用RouteValueDictionary.ContainsKey而不是string.IsNullOrEmpty().

目前发生的事情是您string.IsNullOrEmpty()需要一个字符串,因此,您自然会调用.ToString()RouteData。但是,您正在调用.ToString()一个 null 对象,这会导致您的错误。我会像这样重写它:

if (HttpContext.Current.Request.RequestContext.RouteData.Values.ContainsKey("Language")) {
    // .. process it here
}
于 2012-08-06T04:45:03.877 回答
0

如果.Values["Language"]正在生产null,您可以像这样检查它:

if(HttpContext.Current.Request.RequestContext.RouteData != null)
{
    var value = HttpContext.Current.Request.RequestContext.RouteData.Values["Language"];
    lang = value == null ? null : value.ToString();
}
于 2012-08-06T04:44:08.290 回答