C# 如何解决MVC4应用程序中的CultureNotFoundException?
我的MVC 4应用程序中有此过滤器: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
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。。。。。我可能只是不理解这个问题。是的,我可能已经理解了,我应该如何将数据传递到我的“未找到”页面以显示发生的错误。这当然取决于该页面,我无法回答。捕获该特定异常,然后作为响应显示相应的错误消息和/或页面。