【问题标题】:How to mask 'ReturnUrl' in url?如何屏蔽 url 中的“ReturnUrl”?
【发布时间】:2016-10-17 11:46:20
【问题描述】:

我有一个 asp.net mvc 项目,当进入 loginPage 我的 url 看起来像:

http://localhost:63356/Account/Login?ReturnUrl=%2F

我不希望它看起来像这样,并且在 routConfig 文件中我已经这样做了:

routes.MapRoute(
   name: "LogIn",
   url: "LogIn",
   defaults: new { controller = "Account", action = "Login" }
);

这应该使网址像这样:

http://localhost:63356/Login

我错过了什么?

编辑:

登录操作:

[AllowAnonymous]
public ActionResult Login()
{
  return View();
}

编辑 2: @pwas 提到这是在视图中设置的,所以我通过删除 returnUrl 参数来更改它:

<section role="main" id="login">
    <div class="panel center-block logInBlock" style="width:300px;">
        <div class="panel-heading loginHeadPadding"><h1>Logga in</h1></div>
        <div class="panel-body loginBodyPadding">

            @using (Html.BeginForm("Login", "Account", new {  }, FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
            {
                @Html.AntiForgeryToken()
                <div class="form-group text-left">
                    @Html.LabelFor(m => m.UserName, "Användarnamn")
                    @Html.TextBoxFor(m => m.UserName, new { @class = "form-control", placeholder = "Användarnamn" })
                </div>
                <div class="form-group text-left">
                    @Html.LabelFor(m => m.Password, "Lösenord")
                    @Html.PasswordFor(m => m.Password, new { @class = "form-control", placeholder = "Lösenord" })
                </div>

                <input type="submit" value="Logga in" class="btn btn-primary btn-block" />

                @Html.ValidationSummary(true, "", new { @class = "text-danger" })
            }
        </div>
    </div>
</section>

问题依旧

【问题讨论】:

  • 我认为你应该使用 Url Patterns msdn.microsoft.com/en-us/library/…
  • 那是在你创建一个新应用时由AccountController中的方法生成的。这样当用户导航到需要授权的方法时,他们会自动重定向到登录页面,并且当他们提交时,会重定向回他们导航到的页面(对于您的 url,到 @987654328 @方法HomdeController)
  • %2F 是 url 编码的。它被解码 bslur id.. '/.Route has nothing to do with tjat. Check Url.Action` 或 ActionLink 在视图中生成此 url。
  • 做了一些改动,请检查修改。
  • @Stephen Muecke 'PreserveLoginUrl' 未包含在 appsettings 中,当您说“修改 web.config.cs”时,您的意思是什么?如果可以,请提供答案。

标签: c# asp.net-mvc asp.net-mvc-5


【解决方案1】:

在文件Startup.Auth.cs 中,MVC 模板可能生成了这样的块:

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    // ...
    LoginPath = new PathString("/Account/Login"),
    // ... more ...
});

改成这样:

    LoginPath = new PathString("/Login"),

然后它会工作,结合你已经定义的路线。


去掉ReturnUrl=是另外一回事,通过ASP.NET的授权机制实现的比较强。
可以将名称更改为例如from= 将其放在上面的块中:

    ReturnUrlParameter = "from",

将其设置为"" 不会删除它,只是使用的名称将为空。此外,您还必须在其他几个地方进行更改,以确保在任何地方都使用新名称。

要完全删除它,有各种指南,但我相信大多数(如果不是全部)都涉及重定向或 URL 重写。

【讨论】:

  • 谢谢!它可能没有摆脱 retunrUrl 参数,但 url 更干净。如果没有太多要问的问题,您是否将这些指南中的任何一个保存在某个地方?会很高兴学习。
  • 参见例如这个:stackoverflow.com/a/35377276/1220550。另一种方法是创建一个新的“虚拟”登录操作​​方法,将其名称放在LoginPath= 中,并且正文仅包含Return Redirect("~/Login");
  • 谢谢@Peter B
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-04
  • 1970-01-01
  • 2014-12-19
  • 1970-01-01
相关资源
最近更新 更多