2011-08-11 8 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

ご返信いただきありがとうございますが、どのような場合、私はあなたのコードを試してみましたが、いくつかの変更を加えました。私はセッションで私のユーザーを取得しているので、最初にロードするときに例外(nullポインタ)を持っていました。条件が満たされたら、それをスキップします。一度呼び出されたglobal.asaxとして再び内部に入りません。助言 –

+0

誰かがプロフィールにアクセスしている場合、一般的にプロフィールを作成したユーザーではないため、Sessoinはあなたのルートを検証するための正しい情報を含んでいません。ルートの有効性を確認する唯一の方法は、ユーザーデータベースを使用する方法です。 – counsellorben

+0

はい、あなたはFacebookにいますが、プロフィールをクリックするとTwitterはそれを行います。このリンクを取得します。http://twitter.com/#!/YourUserName –

関連する問題