Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何解决MVC4应用程序中的CultureNotFoundException?_C#_Asp.net Mvc_Asp.net Mvc 4_Localization - Fatal编程技术网

C# 如何解决MVC4应用程序中的CultureNotFoundException?

C# 如何解决MVC4应用程序中的CultureNotFoundException?,c#,asp.net-mvc,asp.net-mvc-4,localization,C#,Asp.net Mvc,Asp.net Mvc 4,Localization,我的MVC 4应用程序中有此过滤器: using System.Globalization; using System.Threading; using System.Web.Mvc; using System; namespace MvcApplication20.Filters { public class CultureFilter : IAuthorizationFilter { private readonly string defaultCultur

我的MVC 4应用程序中有此过滤器:

using System.Globalization;
using System.Threading;
using System.Web.Mvc;
using System;

namespace MvcApplication20.Filters
{
    public class CultureFilter : IAuthorizationFilter
    {
        private readonly string defaultCulture;

        public CultureFilter(string defaultCulture)
        {
            this.defaultCulture = defaultCulture;
        }

        public void OnAuthorization(AuthorizationContext filterContext)
        {
            try
            {
                var values = filterContext.RouteData.Values;

                string culture = (string)values["culture"] ?? this.defaultCulture;

                CultureInfo ci = new CultureInfo(culture);

                Thread.CurrentThread.CurrentCulture = ci;
                Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(ci.Name);
            }
            catch (Exception e)
            {
                Utility.Utility.WriteLineToConsole("Exception: " + e.Message);
            }
        }
    }
}
我使用路由来覆盖我的应用程序的本地化,因此我需要在URL中包含语言部分,例如:

http://localhost:5556/en/ControllerName/ControllerMethod
问题是,如果我不小心删除了URL中的语言部分,即区域性,我会在浏览器中获得“未找到”页面,并在调试中获得“CultureNotFoundException”,消息为:“不支持区域性”。。 当然,它不能将ControllerName作为一种文化/语言来处理

但是,“未找到”页面不会告诉您问题出现的位置

通知我或用户我或他错过了URL中的语言部分的最佳方式是什么


CultureInfo类是否有处理未知区域性的特定方法?

您可以通过传递错误代码重定向到某个控制器/操作方法,然后在错误视图中检查该错误代码,并将错误显示为“未找到区域性”

在catch块中,您可以像

context.Result = RedirectToRoute("StatusCodeRoute", new { statusCode = "1001" });
然后在状态码控制器中

[Route("/StatusCode/{statusCode}", Name = "StatusCodeRoute")]
        public IActionResult Index(int statusCode)
        {
           return View(statusCode);

        }
以及您的错误视图

@model int

    @{

        var statusCode = Model;

        var statusmessage = "";

        switch (statusCode)

        {

            case "1001":

                statusmessage = "Culture not found";

                break;


            default:

                statusmessage = "That’s odd... Something we didn't expect happened";

                break;

        }

    }

    <div class="jumbotron">

        <h1>Error @Model</h1>

        <h3>@statusmessage</h3>

    </div>
@model int
@{
var statusCode=模型;
var statusmessage=“”;
开关(状态代码)
{
案例“1001”:
statusmessage=“未找到区域性”;
打破
违约:
statusmessage=“这很奇怪……发生了我们意想不到的事情”;
打破
}
}
错误@模型
@状态信息

“CultureInfo类是否有处理未知区域性的特定方法?”是吗?它抛出CultureNotFoundException。。。。。我可能只是不理解这个问题。是的,我可能已经理解了,我应该如何将数据传递到我的“未找到”页面以显示发生的错误。这当然取决于该页面,我无法回答。捕获该特定异常,然后作为响应显示相应的错误消息和/或页面。