2

ASP.NETMVC4プロジェクトに次のルート構成があります。

routes.MapRoute(
  name:        "HttpError",
  url:         "{controller}/{id}",
  defaults:    new { controller = "Error", action = "Index" },
  constraints: new { id = @"\d+" }
);

ここで、の代わりにを指すURLを生成するRedirectResultまたはを生成する方法を知りたいと思います。RedirectToRouteResult/Error/403/Error/Index/403

追加情報

オーバーライドされたメソッドの内部のカスタム実装から、許可されていないユーザーをリダイレクトしようとしています。System.Web.Mvc.AuthorizeAttributeHandleUnauthorizedRequest(AuthorizationContext)

4

4 に答える 4

1

ルートにリダイレクトすると、次のようなことができます。

return RedirectToRoute("HttpError", new { controller = "Error", id = "401" }

アクションなしでリンクを生成する必要があります。

于 2012-11-28T14:28:49.980 に答える
1

あなたの場合にこれを使用してください:

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
    filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary
                                                         {
                                                             {"action", "Index"},
                                                             {"controller", "Error"},
                                                             {"id", "403"},  
                                                         });
}

ルートを適切な場所に配置する必要があることを考慮に入れる必要があります。たとえば、次のようなより一般的なルートの前です。

routes.MapRoute(
           name: "HttpError",
routes.MapRoute(
           name: "Default",

順序を逆にすると、MVCは適合する最初のルートをフェッチし、たとえば /Error/Index/403の代わりにリダイレクトします/Error/403

于 2012-11-28T14:45:42.877 に答える
0

これがまさにあなたが探していたものではなかったと思いますが、私にとっては、このようなものを返すだけで十分でした

return RedirectToRoute( new {controller = "controller_name", 
                             action = "action_name"});
于 2013-02-08T20:19:54.317 に答える
0

filterContext.Resultを次のように変更する必要があります(失敗した承認の場合)

 filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new  {  Controller = "SomeController", area = "MayBeSomeArea" }));

これは、-のHandleUnauthorizedRequestメソッドをオーバーライドしている場所で行う必要があります。AuthorizeAttribute

于 2012-11-28T14:37:47.943 に答える