Почему я получаю: "Культура не поддерживается" и "Что, если что-нибудь, что я должен делать?"

У меня есть точка останова на строке "return" здесь:

[HttpGet]
[Route("api/Test/{id1}/{id2}")]
public NRBQEntity GetTestMessage(String id1, String id2)
{
    return NRBQClient.GetTestMessage(id1, id2);
}

Хотя это не сбой приложения, когда я дойду до этой точки, я получаю

"Исключение: Брошено:" Культура не поддерживается. "(System.Globalization.CultureNotFoundException) Исключение System.Globalization.CultureNotFoundException: "Культура не поддерживается". "

Какая культура пытается быть поддержана, почему она не поддерживается, и что, если что-нибудь, я должен сделать, чтобы поддержать культуру?

UPDATE

Отвечайте на sphanley:

Кроме того, чтобы стоять за "Новые райдеры BarbeQue", это "скелет" (на данный момент) Entity, который выглядит так:

public class NRBQEntity
{
    public NRBQEntity()
    {

    }

    public String Value { get; set; }
}

ОБНОВЛЕНИЕ 2

Ответ другому пользователю:

Это не мой код, поэтому я просто пытаюсь его проверить; он был предоставлен в качестве отправной точки для меня, чтобы скопировать/реорганизовать существующий автономный проект, включив его в "решение". Это, как было сказано, чтобы ответить на ваш вопрос, вот все примеры "GetTestMessage()" в решении:

[HttpGet]
[Route("api/Test/{id1}/{id2}")]
public NRBQEntity GetTestMessage(String id1, String id2)
{
    return NRBQClient.GetTestMessage(id1, id2); 
}

[HttpGet]
[Route("api/Test/{id1}/{id2}")]
public NRBQEntity GetTestMessage(String id1, String id2)
{
    return NRBQService.GetNRBQEntity(id1, id2);
}

public interface INRBQClient
{
    NRBQEntity GetTestMessage(String id1, String id2);
}

public NRBQEntity GetTestMessage(String id1, String id2)
{
    var res = RESTAPIClient.GET<NRBQEntity>(null
       , new Uri(NRBQClientSettings.NRBQAPI)
       , String.Format("api/Test/{0}/{1}"
                        , id1
                        , id2)
                        );

    if (res.status != RequestResultStatus.Success)
    {
        throw new Exception(res.message);
    }

    return res.result;
}

... и этот тест:

[TestFixture, Category(DRBCOMMON.UnitTests.Categories.IntegrationTest)]
public class NRBQClientIntegrationTests
{    

    [Test]
    public void TestNRBQInterface()
    {
        var NRBQClient = IOC.container.Resolve<INRBQClient>();

        var s = NRBQClient.GetTestMessage("GET", "SORTY");

        Assert.Greater(s.Value.Length, 0);
    }
}

Ответ 1

Какая культура пытается поддерживать

Поместите try/catch вокруг строки нарушения и поймайте исключение. Поместите точку останова внутри блока catch и отлаживайте код. Изучите свойство свойства CultureNotFoundException InvalidCultureName. Это скажет вам, какая культура пытается использовать, но не найдена в системе.

Почему он не поддерживается

В Windows есть встроенный набор культур (Какие культуры поддерживаются классом CultureInfo в .NET 3.5? и http://msdn.microsoft.com/en-us/goglobal/bb896001.aspx). Если Культура, указанная в InvalidCultureName, отсутствует в списке, она не поддерживается.

Что, если что-нибудь, я должен сделать, чтобы поддержать культуру?

Это зависит от того, что InvalidCultureName. Если вы законно пытаетесь использовать не поддерживаемую культуру (например, у вас есть многоязычный/многорегиональный сайт и вы хотите поддерживать английский язык для каждой культуры), у вас может быть законная необходимость создать новую культуру. Например, я работал на сайте http://www.oneill.com, где мы хотели иметь французскую версию сайта Нидерландов (http://www.oneill.com/nl-fr). Мы должны были создать новую культуру и установить ее на веб-сервере, используя следующие инструкции: http://msdn.microsoft.com/en-us/library/ms172469(v=vs.90).aspx

Если вы не занимаетесь какой-либо причудливой культурой, есть некоторые известные проблемы с asp.net, которые включают фреймворк, ошибочно создающий экземпляры CultureInfo на основе каталогов, которые могут отсутствовать:

В этом случае похоже, что решение состоит в том, чтобы просто отключить Exception и игнорировать его.

Ответ 2

Вы можете проверить все существующие коды в этом списке.

Вы можете создать пользовательскую культуру, например:

// Create a new colture, with the name you desire
CultureAndRegionInfoBuilder cib = new CultureAndRegionInfoBuilder("en-IN", CultureAndRegionModifiers.None);

// Load all defaults from en-US
CultureInfo ci = new CultureInfo("en-US");
cib.LoadDataFromCultureInfo(ci);

// Populate the new CultureAndRegionInfoBuilder object with region information.
RegionInfo ri = new RegionInfo("US");
cib.LoadDataFromRegionInfo(ri);

// Now you can make changes, or finish.
// Changes can be currency, RegionName, etc.

// Finish
cib.Register();

в этой статье объясняется, как это сделать.