asp.net mvc的。路由和网址建设 [英] asp.net mvc. Routing and Url building

查看:116
本文介绍了asp.net mvc的。路由和网址建设的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

是否有任何身体知道如何隐藏URL中的一些参数?

Does any body knows how to hide some parameters in url?

例如你有一个URL参数文化。它可以是恩,法国,意大利。
默认情况下你的网站呈现在恩的文化,我们不惯于以示默认文化的URL,但在其他文化参数文化的情况下,必须出现在URL。

For example you have a url parameter "culture". It can be "en, fr, it". By default your site renders in "en" culture and we don't wont to show default culture in the URL but in cases of other cultures parameter "culture" must appear in URL.

http://myrendersite.net/barbikueue
http://myrendersite.net/fr/barbikueue

这是在不同文化中相同的页面。
如何做到立足默认asp.net的MVC路由系统是什么?

This is same pages in different cultures. How to do what basing on default asp.net mvc routing system?

推荐答案

这将帮助:

<一个href=\"http://stackoverflow.com/questions/3683404/asp-net-mvc-localized-routes-and-the-default-language-for-the-user\">ASP.NET MVC,本地化路线,为用户默认语言

asp.net的MVC本地化

集文化一个ASP.Net MVC应用

您必须先注册两条路线:

You have to register two routes:

routes.MapRoute(
            name: "DefaultLang",
            url: "{language}/{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
            constraints: new { language = "[a-z]{2}"}
        );

routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

创建一个属性继承 ActionFilterAttribute

public class LanguageActionFilterAttribute : ActionFilterAttribute
    {

        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            var routeDataKey = "language";
            var defaultLang = "en";
            var defaultCulture = "EN";

            // if no language route param received
            if (filterContext.RouteData.Values[routeDataKey] == null /* && currentCulture != "en-EN" */)
            {
                // change culture to en-EN
                Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(string.Format("{0}-{1}", defaultLang, defaultCulture));
                Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(string.Format("{0}-{1}", defaultLang, defaultCulture));
            }
            else
            {
                 /*if (currentCulture != "whatever")
                 { 
                    //set culture to whatever
                 }*/
            }

            base.OnActionExecuting(filterContext);
        }
    }

在这之后创建一个 BaseController 通过previous创建的属性:

After that create a BaseController with the previous created attribute:

[LanguageActionFilter]
public abstract class BaseController : Controller
{

}

和所有的控制器将继承 BaseController 现在,而不是控制器

And all your Controllers will inherit BaseController now, instead of Controller

这篇关于asp.net mvc的。路由和网址建设的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆