mvc如何使用 Route 路由来完成laravel 路由二级域名名功能

【跟谁学社区】-学习论坛_学习小组_兴趣小组
话题小组123帮你解决孩子教育和妈妈成长问题NEW「职说Talk」,专属职场人学习的平台。NEW领先的高考状元培养社群。NEW外教爸爸双语宝宝让0-12岁儿童爱上英语三岁看小,七岁看老,家庭教育至关重要!这里有你想要的咨询,快来加入吧!嗨!We are 伐木累!一起打造嗨皮高中生活~~来找到与你相知的那一群人!情调的生活,钱多多的职场,都是我们的!张开梦想的翅膀,我们飞向新世界!粉丝互动、建议反馈,嗨起来~中国爱乐乐团第一小提琴手高中小海量资料,坚持看一年,英语会改变30年成就3000万人魅力表达、身心富足瑜伽,让你遇到最美丽的自己!解析高考招生政策,介绍大学和专业最简单方法。分数+ 能力,语言+ 逻辑。三分长相 七分打扮 会打扮的女人最好命!既然选择远方,便只顾风雨兼程关于日语、关于日本,一起聊聊吧每天都离法国更近一点在喧嚣的世界中打造一片心灵的净土!爱美术,爱生活每日变换自己的装束,分享你的美!蹦沙卡拉卡~帅哥美女看这里~大千世界,总有你不知道的事~热门帖子17278163222142612021102210321340001011110111000020010111...hi,欢迎来到跟谁学社区登录
关注我们官方微信关于跟谁学服务支持帮助中心&&&&&filter&
&&&&&&&&&filter-name&URLFilter&/filter-name&
&&&&&&&&&filter-class&com.yowob.commons.URLFilter&/filter-class&
&&&&&/filter&
&&&&&filter-mapping&
&&&&&&&&&filter-name&URLFilter&/filter-name&
&&&&&&&&&url-pattern&/*&/url-pattern&
&&&&&/filter-mapping&
过滤器的代码如下。这里先将二级域名和全球域名和用户ID的映射,保存在一个数据表里, 然后访问进来时对地址做一个判断, 再取出对应的用户ID. 再转一下就行了. 我的静态文件都在static目录,所以还加了一个static的判断。
用time对应用户ID为6,则访问效果有&相同, 不过地址栏还是显示。
再比如:htttp://www.userdomain.com/board/21,这个是用户ID为6的全球域名,访问效果也和上面一样。
package&com.yowob.
import&java.io.IOE
import&java.util.HashM
import&java.util.L
import&java.util.M
import&javax.servlet.F
import&javax.servlet.FilterC
import&javax.servlet.FilterC
import&javax.servlet.ServletE
import&javax.servlet.ServletR
import&javax.servlet.ServletR
import&javax.servlet.http.HttpServletR
import&org.apache.commons.lang.StringU
import&org.apache.commons.lang.math.NumberU
import&org.apache.commons.logging.L
import&org.apache.commons.logging.LogF
import&com.yowob.C
import&com.yowob.dao.SiteDAO;
import&com.yowob.dto.SiteDTO;
public&class&URLFilter&implements&Filter&{
&&&&private&static&final&Log&log&=&LogFactory.getLog(URLFilter.class);
&&&&private&static&final&String&DOMAIN_END&=&"."&+&Constants.DOMAIN;&//.you.com
&&&&private&static&final&Map&String,&Long&&NAME_MAP&=&new&HashMap&String,&Long&();
&&&&private&static&final&Map&String,&Long&&DOMAIN_MAP&=&new&HashMap&String,&Long&();
&&&&@Override
&&&&public&void&init(FilterConfig&filterConfig)&throws&ServletException&{
&&&&&&&&log.info("------------------------------init");
&&&&&&&&SiteDAO&siteDAO&=&new&SiteDAO();
&&&&&&&&List&SiteDTO&&list&=&siteDAO.getAll();
&&&&&&&&for&(SiteDTO&siteDTO&:&list)&{
&&&&&&&&&&&&String&name&=&siteDTO.getName();
&&&&&&&&&&&&if&(StringUtils.isNotEmpty(name))&{
&&&&&&&&&&&&&&&&NAME_MAP.put(name,&siteDTO.getId());
&&&&&&&&&&&&}
&&&&&&&&&&&&String&domain&=&siteDTO.getDomain();
&&&&&&&&&&&&if&(StringUtils.isNotEmpty(domain))&{
&&&&&&&&&&&&&&&&DOMAIN_MAP.put(domain,&siteDTO.getId());
&&&&&&&&&&&&}
&&&&public&static&void&updateName(String&oldValue,&String&newValue,&Long&siteId)&{
&&&&&&&&if&(StringUtils.equals(oldValue,&newValue))&{
&&&&&&&&&&&&return;
&&&&&&&&if&(StringUtils.isNotEmpty(oldValue))&{
&&&&&&&&&&&&NAME_MAP.remove(oldValue);
&&&&&&&&if&(StringUtils.isNotEmpty(newValue))&{
&&&&&&&&&&&&NAME_MAP.put(newValue,&siteId);
&&&&public&static&void&updateDomain(String&oldValue,&String&newValue,&Long&siteId)&{
&&&&&&&&if&(StringUtils.equals(oldValue,&newValue))&{
&&&&&&&&&&&&return;
&&&&&&&&if&(StringUtils.isNotEmpty(oldValue))&{
&&&&&&&&&&&&DOMAIN_MAP.remove(oldValue);
&&&&&&&&if&(StringUtils.isNotEmpty(newValue))&{
&&&&&&&&&&&&DOMAIN_MAP.put(newValue,&siteId);
&&&&@Override
&&&&public&void&destroy()&{
&&&&&&&&log.info("------------------------------destroy");
&&&&@Override
&&&&public&void&doFilter(ServletRequest&servletRequest,&ServletResponse&response,&FilterChain&filterChain)&throws&IOException,&ServletException&{
&&&&&&&&HttpServletRequest&request&=&(HttpServletRequest)&servletR
&&&&&&&&String&requestURI&=&request.getRequestURI();
&&&&&&&&String&serverName&=&request.getServerName().toLowerCase();
&&&&&&&&String&realURI&=&getRealRequestURI(serverName,&requestURI);
&&&&&&&&request.getRequestDispatcher(realURI).forward(request,&response);
&&&&private&String&getRealRequestURI(String&serverName,&String&requestURI)&{
&&&&&&&&if&(Constants.WWW_DOMAIN.equals(serverName)&||&requestURI.startsWith("/static/")&||&Constants.DOMAIN.equals(serverName))&{
&&&&&&&&&&&&return&requestURI;
&&&&&&&&if&(serverName.endsWith(DOMAIN_END))&{
&&&&&&&&&&&&String&secondDomain&=&serverName.substring(<span style="color: #,&serverName.indexOf("."));
&&&&&&&&&&&&//网站id
&&&&&&&&&&&&if&(NumberUtils.isNumber(secondDomain))
&&&&&&&&&&&&&&&&return&getURI(secondDomain,&requestURI);
&&&&&&&&&&&&//网站英文名
&&&&&&&&&&&&Long&siteId&=&NAME_MAP.get(secondDomain);
&&&&&&&&&&&&if&(siteId&==&null)&{
&&&&&&&&&&&&&&&&//保留的二级域名
&&&&&&&&&&&&&&&&if&(Constants.isPrivateSecondDomain(secondDomain))&{
&&&&&&&&&&&&&&&&&&&&return&requestURI;
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&return&"/message?msg=不存在二级域名"&+&secondD
&&&&&&&&&&&&&&&&//&&&&&&&&&&&&&&&&throw&new&RuntimeException("do&not&exist&second&domain:&"&+&secondDomain);
&&&&&&&&&&&&}
&&&&&&&&&&&&return&getURI(siteId&+&"",&requestURI);
&&&&&&&&//域名
&&&&&&&&Long&siteId&=&DOMAIN_MAP.get(serverName);
&&&&&&&&if&(siteId&==&null)&{
&&&&&&&&&&&&return&requestURI;
&&&&&&&&}&else&{
&&&&&&&&&&&&return&getURI(siteId&+&"",&requestURI);
&&&&private&static&String&getURI(String&siteId,&String&requestURI)&{
&&&&&&&&if&(requestURI.equals("/"))&{
&&&&&&&&&&&&return&"/"&+&siteId;
&&&&&&&&}&else&{
&&&&&&&&&&&&return&"/"&+&siteId&+&requestURI;
其他一些小技巧:
(1)为了便于本机测试,可以修改windows 的hosts文件。我的如下:
<span style="color: #7.0.<span style="color: #.1&&&&&&&localhost
<span style="color: #7.0.<span style="color: #.1&&&&&&&you.com
<span style="color: #7.0.<span style="color: #.1&&&&&&&www.you.com
<span style="color: #7.0.<span style="color: #.1&&&&&&&time1.you.com
<span style="color: #7.0.<span style="color: #.1&&&&&&&time2.you.com
<span style="color: #7.0.<span style="color: #.1&&&&&&&<span style="color: #.you.com
<span style="color: #7.0.<span style="color: #.1&&&&&&&www.bobo.com
(2)web页的各种地址则要注意相对路径的问题。主要考虑
首先设置&base href="http://www.yowob.com/" /&,或&base href="http://www.yowob.com/6/" /&其中地址最后要加一个/
然后页面中其他地址前面不加/,就是相对地址(以地址栏为基础)。加上/,则是绝对地址。
阅读排行榜没有更多推荐了,
不良信息举报
举报内容:
Mvc4.0 路由配置多参数
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!donet mvc -
mvc3 CheckBoxList扩展,mvc3的模板也有很多html扩展,但是好像实现了部分重点的,有时候还需要这样去扩展,其实这样是对的,总得给程序员留点空间吧。代码如下:
nopcommerce插件机制是相当优秀的,所以就分析一下然后拿来所用,集成到自己的网站架构里。写篇小文记录一下。不足和错误之处还望指正,nop版本2.5
由于老的系统可能会有aspx文件,包括文件夹下的default.aspx文件,如果直接用mvc里的controller是不能直接过渡某个目录的,这时就得用文件路由了,直接指定文件路由到controller和action,如下。
自定义actionresult返回rss类型
我们定义了两个类,第一个类是抽象类,第二个类继承他,并且通过枚举类型和委托来实现强类型,所以我们返回的是抽象类型,只需要实现这个抽象类型就行了。
在本地测试mvc3的ajax删除功能
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult DeleteInfo(string id){}
在本地是能获取id的,但是在服务器上就获取不了了,得用Request获取,原因正在研究当中
因为要实现用户注册自定义域名,类似淘宝这样,所以必须实现mvc的route相关类
第一种通过修改host文件和添加路由来实现自定义二级域名
参考文章:http://hanssens.org/post/ASPNET-MVC-Subdomain-Routing.aspx
mvc3 验证码,用Html扩展来实现
今天用mvc3的路由功能发现如果有默认路由
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
如果我们再添加新的路由如
routes.MapRoute(
"StoreItemlist", // Route name
"{controller}/{action}/{storeid}", // URL with parameters
new { controller = "Store", action = "ItemList", storeid = UrlParameter.Optional } // Parameter defaults
那么我们是接收不到storeid的,输入http://localhost:5013/store/itemlist/1
在RouteData里我们查看到路由路径会被默认路由覆盖掉及我们获取的是路由key依次是controller/action/id。所以路由名称不能重复的情况下,我们的路由路径也不要重复,否则你死活都获取不到你要的值。
SportsStore的mvc3分页示例,使用Linq实现,很简洁有效,所以拿来分享一下
从今天开始完整学习asp.net mvc,顺便学学英语,在博客上记录每天看到的页数和一些理解的笔记,看看自己是否能够坚持下去。让博客见证自己。
《Pro.ASP.NET.MVC.3.Framework(3rd Edition)》 pdf版本,用电脑看查字典方便,用灵格斯划词翻译。[转载]MVC札记(五)--路由机制
一、Routing(路由)的作用
1、匹配传入的请求(不匹配服务器物理文件);
2、将请求映射到 控制器 的具体操作 Action方法&和 参数;
3、调用并执行对应 控制器 类的 Action 方法;
*好的Url应该满足如下条件:
1、URL应为获取某种资源提供信息,不一定是物理文件路径;
2、简短易于记忆和拼写输入;
3、可以反映出站点结构;
4、应该是【可拆分】,用户移除末尾,进而获得更高层次信息;
5、持久、不应改变。
二、Routing(路由)包含字面值的URL
1、路由URL在段中也允许包含【字面值】,如:/gz/{controller}/{action}/{id}
&& //规定第一个段必须以 gz
开头,才能与该路由匹配,如:/gz/home/index/1
2.URL中可以字面量和参数混合在一期,如:
{controller}-{action}-{id} 匹配:/Home-Index-1
{controller}.{action}.{id}& 匹配:/Home.Index.1
{controller}/{action}-{id}& 匹配:/Home/Index-1
{controller}/{action}-{month}/{day}&
匹配:/Home/Index-1/24
但,不能有两个连续的url参数 :{controller}{action}-{id}
三、路由约束
1、&Global.asax.cs文件中定义了路由的识别规则
Routes.MapRoute(
"Default", // 1.路由名称
"{controller}/{action}/{id}", // 2.带有参数的URL
&&&&&&&&&&&&&&&&&&
controller = "Home",
&&&&&&&&&&&&&&&&&&
action = "Index",
&&&&&&&&&&&&&&&&&&
id = UrlParameter.Optional
&&&&&&&&&&&&&&&&
} // 3.参数默认值
2、允许URL段使用正则表达式来限制路由是否匹配请求,而且可以指定优先匹配命名空间
routes.MapRoute(
&&&&&&&&&&&&&&&
"blog", // 路由名称
&&&&&&&&&&&&&&&
"{controller}/{action}/{id}", // 带有参数的 URL
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&
controller = "Home",
&&&&&&&&&&&&&&&&&&&&&
action = "Index",
&&&&&&&&&&&&&&&&&&&&&
id = UrlParameter.Optional
&&&&&&&&&&&&&&&&&&&&&},//
参数默认值
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&
constraints: new { action = @"[a-zA-z]+", id = @"d+" },
&&&&&&&&&&&namespaces:
new string[] { "MyBlog.Controller" }//优先找 命名空间 为
MyBlog.Controller
&&&&&&&&&&&
路由按照先后顺序与传入的URL匹配,直到匹配成功为主
四、Area 区域
1.&MVC 项目目录结构
缺点:1.不利于分功能协作开发(购物车/商品管理/用户权限管理…);2.代码结构臃。
2.&可使用Area区域解决,甚至可以从物理上分开。Area文件夹包含:
(1)一套新的MVC文件夹
(2)AreaRegistration.cs文件,如:
& public class AdminAreaAreaRegistration :
AreaRegistration
public override string AreaName
//AreaName区域名:唯一用途就是在在加载视图的时候找视图,添加一个特殊的路径。
//视图引擎在加载视图时,其匹配的路由是通过区域注册类添加的,那么就会检查AreaName属性,
立即在路径添加~/Areas,并根据AreaName属性的返回值,生成视图。
&&&&&&&&&&&
&&&&&&&&&&&
&&&&&&&&&&&&&&&
return "AdminArea";
&&&&&&&&&&&
//注册当前区域路由信息(也是添加到了 路由表 中!)
public override void RegisterArea(AreaRegistrationContext
&&&&&&&&&&&
context.MapRoute(
&&&&&&&&&&&&&&&
"AdminArea_default",
&&&&&&&&&&&&&&&
"AdminArea/{controller}/{action}/{id}",
&&&&&&&&&&&&&&&
new { action = "Index", id = UrlParameter.Optional }
&&&&&&&&&&&
//路由表其实在Global.asax文件中,此方法会在网站被浏览器第一次请求的时候执行(且只会被执行一次!)
protected void Application_Start()
&&&&&&&&&&&
//1.注册区域
&&&&&&&&&&&
AreaRegistration.RegisterAllAreas();
&&&&&&&&&&&
//2.注册配置
&&&&&&&&&&&
WebApiConfig.Register(GlobalConfiguration.Configuration);
&&&&&&&&&&&
//3.注册 过滤器
&&&&&&&&&&&
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
&&&&&&&&&&&
//4.注册 路由配置
&&&&&&&&&&&
RouteConfig.RegisterRoutes(RouteTable.Routes);
&&&&&&&&&&&
//5.注册 绑定在一起 静态文件(节约浏览器的请求次数 和 服务器发送的数据量)
&&&&&&&&&&&
BundleConfig.RegisterBundles(BundleTable.Bundles);
3、Area 区域运行原理:
框架会根据路由到当前程序集和所有的引用程序集查找符合命名规则的控制器类。找控制器类的时候有两个条件:是Contoller类的子类,而且类的命名必须以Controller结尾。
框架会先到自己的项目去找,然后再去其他项目去找controller和index。如果找到多个同名的controller,就会无法识别,所以在注册路由的时候还要加上命名空间的约束(1.限制查找的范围;2.避免出现多个同名控制器类不知道用哪个)。如果在指定命名空间的时候找不到,就会找其他命名空间的相应控制器
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 asp.net mvc 二级域名 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信