我在多语言项目中实现了URL路由,我的链接看起来像这样
1>使用网址路由http://www.example.com/Default.aspx?page=1&Language=en-US 2 - ;使用网址路由http://www.example.com/1/en-US
3>第三种情况可以是http://www.example.com/Default.aspx或http://www.example.com
我可以检查查询字符串是否为null或者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 block
使这个语句处理null异常HttpContext.Current.Request.RequestContext.RouteData.Values["Language"].ToString();
答案 0 :(得分:3)
您可以使用RouteValueDictionary.ContainsKey
代替string.IsNullOrEmpty()
。
目前正在发生的事情是,string.IsNullOrEmpty()
需要一个字符串,所以,你自然会在RouteData上调用.ToString()
。但是,您在空对象上调用.ToString()
,这会导致您的错误。我会像这样重写它:
if (HttpContext.Current.Request.RequestContext.RouteData.Values.ContainsKey("Language")) {
// .. process it here
}
答案 1 :(得分: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();
}