为什么我会这样做,"文化不受支持"什么,如果有什么,我该怎么办呢?

时间:2014-06-20 17:04:37

标签: c# asp.net-web-api globalization cultureinfo culture

我在"返回"有一个断点。在这里:

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

虽然它没有让应用程序崩溃,但当我达到这一点时,我明白了,

" 异常:抛出:"不支持文化。" (System.Globalization.CultureNotFoundException) 抛出了System.Globalization.CultureNotFoundException:"不支持文化。" "

尝试支持哪种文化,为什么不支持这种文化,以及我应该做些什么来支持这种文化?

更新

回答sphanley:

除了代表" BarbeQue的新骑手,"它是一个"骨架" (现在)看起来像这样的实体:

public class NRBQEntity
{
    public NRBQEntity()
    {

    }

    public String Value { get; set; }
}

更新2

对AnotherUser的回答:

这不是我的代码,所以我只是在试图理解它;它是作为一个起点提供给我复制/重构一个现有的独立项目,并将其合并到""解。已经说过,回答你的问题,这里是" 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);
    }
}

2 个答案:

答案 0 :(得分:5)

  

试图支持哪种文化

在违规行周围放置一个try / catch并捕获异常。在catch块中放置一个断点并调试代码。检查抛出的 CultureNotFoundException InvalidCultureName属性。这将告诉您正在尝试使用哪种文化,但在系统中找不到。

  

为什么不支持

Windows内置了一组文化(What cultures are supported by the CultureInfo class in .NET 3.5?http://msdn.microsoft.com/en-us/goglobal/bb896001.aspx)。如果InvalidCultureName中列出的文化不在列表中,则不支持。

  

我应该做些什么来支持这种文化?

这取决于InvalidCultureName是什么。如果您合法地尝试使用不受支持的文化(例如,您拥有多语言/多地区网站并且希望为每种文化支持英语),您可能有合法需要创建新文化。例如,我在一个网站http://www.oneill.com上工作,我们希望在那里拥有法国版的荷兰网站(http://www.oneill.com/nl-fr)。我们必须使用以下说明创建新文化并将其安装在Web服务器上:http://msdn.microsoft.com/en-us/library/ms172469(v=vs.90).aspx

如果你没有做任何花哨的文化,asp.net有一些已知的问题,涉及框架错误地根据可能不存在的目录创建CultureInfo实例:

在这种情况下,看起来解决方案就是关闭Exception并忽略它。

答案 1 :(得分:2)

您可以查看所有现有代码in this list

您可以创建自定义文化,如下所示:

// 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();

this article解释了如何做到这一点。