0

多言語プロジェクトにURLルーティングを実装しました。リンクは次のようになります。

1>URLルーティングを使用http://www.example.com/Default.aspx?page=1&Language=en-US2>URL ルーティングを使用http://www.example.com/1/en-US

3>および3番目のシナリオは、http://www.example.com/Default.aspxまたはhttp://www.example.comです。

クエリ文字列がnullであるか、RouteData値がnullであるかを確認できます

しかし、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();
 }

ルートデータがnullの場合、次のエラーが発生しますObject reference not set to an instance of an object

trycatchブロックなしでこのステートメントにnull例外を処理させるにはどうすればよいですか?

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 に答える