라우팅을 사용하여 내 ASP.NET MVC 응용 프로그램에서 지역화를 구현하려고합니다.ASP.NET MVC 라우팅. 리소스를 찾을 수 없습니다.
예 : www.example.com/Home/Index
- 기본 문화권의 콘텐츠를 표시합니다. www.example.com/en/Home/Index
- 영어가 표시됩니다. www.example.com/ru/Home/Index
- 러시아어 등등 ... 각 작업에 대한
그래서, 내가 만든 현지화 속성 :
public class LocalizationAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.RouteData.Values["lang"] != null && !String.IsNullOrWhiteSpace(filterContext.RouteData.Values["lang"].ToString()))
{
var lang = filterContext.RouteData.Values["lang"].ToString();
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(lang);
Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(lang);
}
else
{
var langHeader = String.Empty;
langHeader = filterContext.HttpContext.Request.UserLanguages[0];
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(langHeader);
Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(langHeader);
}
base.OnActionExecuting(filterContext);
}
}
내 컨트롤러의 모든 행동에 그 속성을 추가하고있다.
그리고 등록 경로 :
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Localization",
"{lang}/{controller}/{action}/{id}",
new { lang = "en-US", controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
탐색 www.example.com/About/Contacts
에 잘 작동합니다. 그러나 www.example.com/en/About/Contacts
또는 그와 비슷한 것으로 이동하면 404 error
: 리소스를 찾을 수 없습니다. 그래서 문제가 될 수 있습니까?
미리 도움 주셔서 감사합니다.
대단히 감사합니다. RouteDebugger를 설치했는데 다음과 같이 표시됩니다. 컨트롤러 : ko 작업 : 약 ID : 연락처 : 그래서 lang 및 컨트롤러에 제약 조건을 추가합니다. 제약 조건 : new {lang = @ "^ [az] {2} $", controller = @ "^ [a-zA-Z] {3,} $"} 여전히 표시 : 컨트롤러 : ko 작업 : 약 ID : 연락처 : –
"로컬라이제이션"경로에 제약 조건을 추가 한 것은 경로를보다 구체적으로 만들기 때문에 중요하지 않습니다. 일치시키려는 라우트가 실제로 일치한다고 말했지만 라우트에 추가 된 최신 라우트 (맨 아래에 "더 중요한"라우트)이므로 "기본값"이 호출됩니다. 경로의 순서를 바꾸거나 "Default"경로의 Id 매개 변수에 숫자 제약 조건을 추가하여 해당 요청에 대해 기본 경로가 더 이상 일치하지 않게하십시오. – chrisd84
아니요, 아무 것도 없습니다. 그러나 "Localization"경로가 "Default"경로가 표시되는 RouteDebugger의 "All Routes"테이블에도 표시되지 않는 것을 발견했습니다. 그리고 "기본"경로를 삭제해도 아무런 변화가 없습니다. 시간 내 주셔서 감사합니다. –