2016-09-24 5 views
1

別のコントローラーやアプリケーションへのリダイレクトに問題があります。ASP COREのURLにリダイレクト

public IActionResult Redirect(NotificationItemViewModel model) 
    { 
     NotificationItemToggleReadCommand command = new NotificationItemToggleReadCommand(); 
     command.Id = new EntityId(model.Id); 
     command.MarkAsRead = true; 


     var result = CommandProcessor.Run(command); 
     RedirectResult redirectResult = new RedirectResult(model.Subject.Url,true); 
     return redirectResult; 
    } 

マイmodel.Subject.Urlこの形式で、たとえば次のとおりです:

私のリダイレクトアクションは次のようになりIdentity/User#/Details/b868b08c-b3ba-4f45-a7b6-deb02440d42f

それはエリア/コントローラ/アクション/ IDです。 問題は、私のRedirectResultがに私をリダイレクトすることです:

notifications/Identity/User#/Details/b868b08c-b3ba-4f45-a7b6-deb02440d42f 

とそのルートが最初にこのコントローラ名を遮断するために、このリダイレクトを強制するにはどうすればよい(コントローラ/面積/コントローラ/アクション/ ID) 存在しないのですか?

マイルート:助けを

app.UseMvc(routes => 
     { 
      routes.MapRoute("areaRoute", "{area:exists}/{controller}/{action=Index}/{id?}"); 

      routes.MapRoute(
       name: "controllerActionRoute", 
       template: "{controller}/{action}", 
       defaults: new { controller = "Home", action = "Index" }, 
       constraints: null, 
       dataTokens: new { NameSpace = "default" }); 

      routes.MapRoute(
       name: "default", 
       template: "{controller=Home}/{action=Index}/{id?}"); 
     }); 
    } 

感謝。

答えて

3

私があなたの問題を正しく理解しているのは、通知領域(他の領域)にあり、その領域から移動しようとしているからです。

そのためには、次のいずれかを行うことができます。

  1. 相対URLを提供する代わりに、絶対URLをRedirectResultに指定してください。今の問題は、アプリケーションのファイアリダイレクトが相対URLを考慮すると問題になることです。

  2. 第2の解決策は、RedirectResultではなくRedirectToActionResultを使用することです。

    RedirectToActionResult redirectResult = new RedirectToActionResult("Details", "User", new { @area = "Identity", @Id = "b868b08c-b3ba-4f45-a7b6-deb02440d42f" }); 
    return redirectResult; 
    

は、上記では、私はその領域名は「アイデンティティ」で、コントローラ名が「ユーザー」で、アクションは、「詳細」であると仮定します。 Acitionには、名前が "Id"の1つのパラメータがあります。あなたの要件に応じて変更することができます。これで絶対URLを構築する必要はありません。

アップデート1

私はあなたが常にルートを行うと、初めに「通知」を無視する必要があると仮定した場合。

少なくともこのようなURLを入力できます。

~/Identity/User#/Details/b868b08c-b3ba-4f45-a7b6-deb02440d42f 
+0

ありがとうございました。残念ながら私はabsouleのURLを取得する可能性はありません。私はいつもこの相対的な1つを取得し、このURLは他のアクションとコントローラを指すことができるので、私は第2の解決策を使用することはできません。 – Ridikk12

+0

私の更新を見てくださいまた私は "ユーザー#"を理解していません。それは問題を引き起こすかもしれない。 – dotnetstep

関連する問題