【问题标题】:ModelState Errors always showing in English in Azure Web Role在 Azure Web 角色中始终以英文显示的 ModelState 错误
【发布时间】:2015-05-15 10:50:29
【问题描述】:

我在 Azure 中部署的 ASP.NET WebApi 中遇到模型验证错误问题。

这是返回 ModelState 错误的代码:

public static class ComprobarErroresModelo
{
    public static string GetErrors(ModelStateDictionary modelState)
    {
        var result = "";
        foreach (var error in modelState.Values.SelectMany(value => value.Errors))
            if (string.IsNullOrEmpty(error.ErrorMessage))
                result = result + error.Exception.Message + '\n';
            else
                result = result + error.ErrorMessage + '\n';
        return result;
    }
}

在 global.asax 中,我尝试了一些修改:

protected void Application_AcquireRequestState(object sender, EventArgs e)
    {
        Thread.CurrentThread.CurrentUICulture = new CultureInfo("es");
        Thread.CurrentThread.CurrentCulture = new CultureInfo("es");

        CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("es");
        CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("es");
    }

    void Application_BeginRequest(Object sender, EventArgs e)
    {
        Thread.CurrentThread.CurrentUICulture = new CultureInfo("es");
        Thread.CurrentThread.CurrentCulture = new CultureInfo("es");

        CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("es");
        CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("es");
    }

但它们都不能在 Azure 中运行,我总是收到英文的 ModelState 错误

我已经在本地环境中将“es”更改为“en”进行了测试,它工作正常,但在 Azure 中它总是显示英文消息错误

如何在 Azure Web 角色中获取西班牙语或其他语言的 ModelState 错误??

【问题讨论】:

    标签: c# azure asp.net-web-api localization


    【解决方案1】:

    您可以创建一个 BaseController,它在初始化时设置了文化,并让您的所有 API 控制器都继承自它,而不是直接从 ApiController 继承:

    public abstract class BaseController : ApiController
    {
        protected override void Initialize(HttpControllerContext requestContext)
        {
            base.Initialize(requestContext);
            var culture = new CultureInfo("es");
            System.Threading.Thread.CurrentThread.CurrentCulture = culture;
            System.Threading.Thread.CurrentThread.CurrentUICulture = culture;
        }
    }
    

    【讨论】:

    • 我已经尝试过了,但它在 Azure 中不起作用。在本地主机工作正常:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-24
    • 1970-01-01
    • 2013-06-07
    • 2012-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多