Возникли проблемы с культурой и NullReferenceException - PullRequest
2 голосов
/ 25 августа 2011

Я пытаюсь закодировать целевую страницу, которая при чтении Культуры решит, будет ли запрос перенаправлен на английский или словацкий сайт.

Вот как выглядит код:

public partial class _default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string strCountry = ResolveCountry().ToString();
        if (strCountry == "SK")
        {
            Response.Redirect("/sk/");
        }
        else
        {
            Response.Redirect("/en/");
        }
    }

    public static CultureInfo ResolveCulture()
    {
        string[] languages = HttpContext.Current.Request.UserLanguages;

        if (languages == null || languages.Length == 0)
            return null;

        try
        {
            string language = languages[0].ToLowerInvariant().Trim();
            return CultureInfo.CreateSpecificCulture(language);
        }
        catch (ArgumentException)
        {
            return null;
        }
    }

    public static RegionInfo ResolveCountry()
    {
        CultureInfo culture = ResolveCulture();
        if (culture != null)
            return new RegionInfo(culture.LCID);

        return null;
    }
}

Проблема в том, что в браузере все выглядит нормально, перенаправляет вас на сайт: http://www.alexmolcan.sk

Но при проверке журнала IIS, инструментов Google для веб-мастеров или http://www.rexswain.com/httpview.html я всегда получаю 500 ASP Ошибка:

 Object·reference·not·set·to·an·instance·of·an·object.
 System.NullReferenceException:·Object·reference·not·set·to·an·instance·of·an·object.

Заголовок ответа:

HTTP/1.1·500·Internal·Server·Error
Connection:·close
Content-Length:·4684

Когда я отлаживаю проект локально, он всегда компилируется без проблем. Я не знаю, что я делаю не так

Спасибо.

EDIT

Исключение

Process information: 
   Process ID: 4068 
   Process name: w3wp.exe 
   Account name: IIS APPPOOL\ASP.NET v4.0 

Exception information: 
   Exception type: NullReferenceException 
   Exception message: Object reference not set to an instance of an object.
   at sk_alexmolcan._default.Page_Load(Object sender, EventArgs e) in default.aspx.cs:line 15
   at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
   at System.Web.UI.Control.LoadRecursive()
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean  includeStagesAfterAsyncPoint)

1 Ответ

3 голосов
/ 25 августа 2011

Я думаю, что вы бросаете, потому что, когда ResolveCountry возвращает null, ваш .ToString () и if (strcountry == "SK") будут бросать.

Невозможно превратить ноль в строку. попробовать

CultureInfo cul = ResolveCountry();
string strCountry = cul== null ? string.empty : cul.ToString();

if (strCountry == "SK") {}
...