2016-04-11 4 views
0

以下のガイドを使用して、自分のmvcアプリケーションのURLを暗号化しました。値が暗号化されているのがわかりますが、探しているページやリソースが見つからないというIISエラーが表示されています。私はそれがルーティングと関係があると思っています。私はMVCに全く新しいので、いくつかのルートの組み合わせを試しましたが、何も動作しません。これを追加するには、デバッグ時にApplication_Startイベントを取得してヒットすることができないので、デバッグすることもできません。 私のroute.configファイルを以下に示します。誰かが私にこの問題を助けてくれますか?ASP.Net MVCでURLを暗号化する4

暗号化の後に生成されるURLはこれです。私のroute.configファイルを以下に示します。

http://localhost/Home/GetInvoice?q=ZDmgxmJVjTEfvmkpyl8GGWP4XHfvR%2fyCFJlJM1s0vKj4J6lYJWyEA4QHBMb7kUJq

http://www.dotnettrace.net/2013/09/encrypt-and-decrypt-url-in-mvc-4.html

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

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

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

     routes.MapRoute(
      name: "Error", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Error", id = 
    UrlParameter.Optional } 
     ); 
     routes.MapRoute(
      name: "ResetPassword", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "ResetPassword", id 
    = UrlParameter.Optional } 
     ); 
     routes.MapRoute(
      name: "Accounts", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "AccountStatus", id  
= UrlParameter.Optional } 
    ); 

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


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

    } 

私が間違っているのどこに私に知らせてください。

私の行動は以下の通りです。

+0

関連:https://paragonie.com/blog/2015/09/comprehensive-guide-url-parameter-encryption-in-php –

答えて

0

私はようやく答えを見つけました。問題は私のウェブサイトがIISでセットアップされており、セットアップされたURLが仮想ディレクトリ名であることでした。家のためのURLはhttp://localhost/VDName/Home/Loginでしたが、私が上記で与えた請求書のために生成されたURLはVD名がないので、404エラーを投げていたのです。 VD名を削除するためにURLを変更しましたが、現在は正常に動作しています。 クリスようにありがとうございました:)

1

まず、キャプチャしているパラメータが実際のURLパスの一部である場合にのみ、カスタムルートが必要です。ここでは、qがクエリ文字列の一部であるため、特別なルーティングは必要ありません。

第2に、http://www.asp.net/mvc/overview/controllers-and-routingにあるドキュメントを確認するのに少し時間を費やす必要があります。 defaultsに渡す匿名オブジェクトのアクションフィールドは、URLのアクション部分が含まれていない場合にロードするアクションをルーティングフレームワークに伝えるだけです。例えば、標準のデフォルトルートに:あなたはURL、/Homeをロードしようとすると

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

、MVCは HomeControllerIndexアクションをロードします。同様に、コントローラーを終了した場合も同様です(つまり、ただ /の場合、MVCはデフォルトであるため、 HomeController.Indexを再度ロードします)。ここでは、すべてのルートが同じURLパターンを使用するため、最初のものだけが利用されます。

URLにコントローラ名とアクション名の両方を渡しているので、最初のルートが一致して、HomeController.GetInvoiceをロードする必要があります。q paramはクエリ文字列内にあり、ルーティングには影響しませんが、アクションではqという名前のパラメータに渡されますので、次のようなアクションがあると仮定します:

public class HomeController : Controller 
{ 
    ... 

    public ActionResult GetInvoice(string q) 
    { 
     ... 
    } 
} 

あなたのルーティングは問題ありません。 404を返すところにはGetInvoiceアクションの場所があるはずです。これがコードが落ちている場所です。一般的に、起こっていることを理解する最も良い方法は、ヒットすると予想されるアクションの開始時にブレークポイントをデバッグして追加することです。ブレークポイントがトリガーされていない場合は、ルーティングに問題がありますが、ブレークポイントにヒットした場合は、コードを1行ずつ歩いて、どこが不調になっているのかを正確に把握できます。

+0

簡単な説明をありがとう。私は間違いなく提案されたリンクを通過します。しかし、私のアクションはまったくヒットしていないので、デバッグできないので、ルーティングに間違っていると思われます。また、URLのqは私のオリジナルのパラメータではありません。私が追加したアクションには2つのパラメータがあり、urlをエンコードしています。結果のURLはエンコーディングの結果です。 – Blossom

関連する問題