【问题标题】:Why do I get, "Culture is not supported" and What, if Anything, Should I Do about it?为什么我会收到“不支持文化”以及我应该怎么做?
【发布时间】:2014-06-20 17:04:36
【问题描述】:

我在此处的“返回”行上有一个断点:

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

虽然它不会使应用程序崩溃,但当我到达那个点时,我明白了,

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

试图支持哪种文化,为什么不支持,如果有的话,我应该做些什么来支持这种文化?

更新

对斯芬利的回答:

除了代表“New Riders of the BarbeQue”之外,它还是一个“骨架”(目前)实体,看起来像这样:

public class NRBQEntity
{
    public NRBQEntity()
    {

    }

    public String Value { get; set; }
}

更新 2

回答另一个用户:

这不是我的代码,所以我只是在尝试理解它;它已作为我复制/重构现有独立项目的起点,将其合并到“the”解决方案中。话虽如此,为了回答您的问题,以下是解决方案中“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);
    }
}

【问题讨论】:

  • 你/我们知道GetTestMessage 长什么样子吗?
  • 谷歌搜索带来了更多的抱怨,根本原因可能是 System.Web 中的错误 - 解决方案可能是为您的 Visual Studio 和 .net 框架安装更新。例如:stackoverflow.com/questions/2116821/… 但是,在您的特定情况下,它也可能是您的自定义代码中的一个错误,因此无效的文化名称以一种或另一种方式传递给 CultureInfo 构造函数。所以额外的堆栈跟踪可能会有所帮助。以及完整的消息。因此,根据它的价值,它会更容易猜测。
  • 你没有给我们足够的诊断问题!
  • @giammin:引用我以前的高中体育课。教练,“你想要什么——啤酒里有鸡蛋?!?”
  • 设置断点,看看你运行的是什么文化。如果不是en-us,则在return之前在线程上设置为en-us。看看会发生什么

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


【解决方案1】:

试图支持哪种文化

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

为什么不支持

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 实例:

在这种情况下,解决方案似乎只是关闭异常并忽略它。

【讨论】:

    【解决方案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 解释了如何做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-16
      • 2021-03-24
      • 2014-01-06
      • 1970-01-01
      • 1970-01-01
      • 2010-10-07
      相关资源
      最近更新 更多