2011-08-11 34 views

回答

0

要路由到配置文件页面,您需要一个RouteConstraint路由来检查用户名的有效性。您的路线必须是第一条路线,并在Global.asax.cs中的RegisterRoutes应该是这样的:

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
     "Profiles", // Route name 
     "{username}", // URL 
     new { controller = "Profile", action = "Index" }, // Parameters 
     new { username = new MustBeUsername() } 

    routes.MapRoute(
     "Default", // Route name 
     "{controller}/{action}/{id}", // URL with parameters 
     new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
    ); 

} 

然后,你必须创建一个RouteConstraint类会检查你的数据库,以确认提交的用户名是有效的:

using System; 
using System.Web; 
using System.Web.Routing; 

namespace ExampleApp.Extensions 
{ 
    public class MustBeUsername : IRouteConstraint 
    { 
     public MustBeUsername() { } 

     private DbContext _db = new DbContext(); 

     public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)  
     {  
      return (_db.Users.Where(u => u.Username == values[parameterName].ToString()).Count() > 0); 
     } 
    } 
} 

counsellorben

+0

谢谢您的答复,但如果我想你的代码,但有一些修改。我得到我的用户通过会话,所以我有一个异常(空指针),当它第一次加载,如果我把如果条件它会跳过它不会再次进入它作为global.asax再次调用一次,请建议 –

+0

如果有人正在访问配置文件,它通常不是创建配置文件的用户,因此您的Sessoin不会包含正确的信息来验证您的路由。检查路线有效性的唯一方法是通过用户数据库。 – counsellorben

+0

是的,你是正确的在Facebook上,但我想推特,如果你点击配置文件,你会得到这个链接http://twitter.com/#!/YourUserName –