C# 在ASP.NETMVC中重写Url

C# 在ASP.NETMVC中重写Url,c#,asp.net-mvc,email,url-rewriting,C#,Asp.net Mvc,Email,Url Rewriting,从昨天开始,我就一直在为这个问题苦苦挣扎。我正在开发一个包含电子邮件服务的web应用程序。电子邮件包含指向该应用程序某个页面的“链接” 现在:我有两个场景: 1) 如果用户已登录(在应用程序中)并点击 他在电子邮件中获得的url,链接将完全打开 2) 如果用户未登录(在应用程序中),则url 将不会打开,并将自身重定向到具有 在基本控制器中添加的功能 * 现在我想要的是当用户在点击url和 成功登录后,用户将重定向到中提供的链接 电子邮件 * 例如:如果用户收到员工详细信息页面的电子邮件,那么成

从昨天开始,我就一直在为这个问题苦苦挣扎。我正在开发一个包含电子邮件服务的web应用程序。电子邮件包含指向该应用程序某个页面的“链接”

现在:我有两个场景:

1) 如果用户已登录(在应用程序中)并点击 他在电子邮件中获得的url,链接将完全打开

2) 如果用户未登录(在应用程序中),则url 将不会打开,并将自身重定向到具有 在基本控制器中添加的功能

*

现在我想要的是当用户在点击url和 成功登录后,用户将重定向到中提供的链接 电子邮件

*

例如:如果用户收到员工详细信息页面的电子邮件,那么成功登录后,用户将重定向到员工详细信息页面

类似于将重定向URL添加到登录页面

我认为重写url是我应该做的


但是我不知道在这种情况下如何使用它。请帮助我。

ASP.NET MVC 5附带的默认项目模板的行为与您描述的完全相同

如果要重定向到自定义登录URL,请重新配置CookieAuthenticationOptions对象的LoginPath属性

LoginPath = new PathString("/Account/Login")
在默认模板中,这是在Startup.Auth.cs类中完成的

注意:如果您使用的是旧版本的ASP.NET MVC,则默认项目模板的行为方式相同。但之前这是使用表单身份验证实现的,因此为了重定向到自定义登录URL,您必须在Web.config文件中设置标记的loginUrl属性

  • 默认情况下,如果用户在未经授权的情况下尝试访问授权页面,则会自动重定向到登录页面或在web.config文件中为元素配置的页面。您可以看到查询字符串returnUrl,其中包含最初尝试访问的url,并附加到登录url中
  • 要访问返回url,请包含一个新参数作为returnUrl,并通过模型数据在隐藏字段中维护返回url,以便在回发时进行重定向
  • 如果用户已通过身份验证,则返回post,然后将用户重定向到指定页面,以了解其意图

  • 我记不清了,但几个月前我实现了类似的功能,我必须显式地保存returnUrl(由于MVC错误或其他原因)-请参阅

    AccountController.cs-快照

            [HttpGet]
            [AllowAnonymous]
            public ActionResult Login(string returnUrl, string userName)
            {
                // You login method logic....
    
                // Add this line to save the returnUrl value
                ViewBag.ReturnUrl = returnUrl;    
            }
    
    @using (Html.BeginForm("Login", "Account", FormMethod.Post ,new {ReturnUrl = ViewBag.ReturnUrl}))
    {
      <input type="hidden" name="ReturnUrl" value="@Request.QueryString["ReturnUrl"]" />
    
     // .....              
    }
    
    Login.cshtml-快照

            [HttpGet]
            [AllowAnonymous]
            public ActionResult Login(string returnUrl, string userName)
            {
                // You login method logic....
    
                // Add this line to save the returnUrl value
                ViewBag.ReturnUrl = returnUrl;    
            }
    
    @using (Html.BeginForm("Login", "Account", FormMethod.Post ,new {ReturnUrl = ViewBag.ReturnUrl}))
    {
      <input type="hidden" name="ReturnUrl" value="@Request.QueryString["ReturnUrl"]" />
    
     // .....              
    }
    
    @使用(Html.BeginForm(“Login”,“Account”,FormMethod.Post,new{ReturnUrl=ViewBag.ReturnUrl}))
    {
    // .....              
    }
    

    看看这对您的情况是否有帮助。

    M正在使用asp.net mvc 4.5应用程序,它不提供任何startup.auth.cs类。我现在应该怎么做?看看默认的项目模板。您可以通过在Visual Studio 2013文件->新建项目->ASP.NET Web应用程序中启动一个新项目来查看这一点,然后确保选择“MVC”模板,而不是“空”模板。我使用的是vs2012,它不提供任何默认模板,就像您建议的那样,vs2012包括使用我描述的旧模型的MVC4。在vs2012中,您只需启动一个新的MVC4项目(文件->新项目->ASP.NET MVC 4 Web应用程序),然后选择“Internet应用程序”模板。这将使用FormsAuthentication,如果需要重定向到自定义登录URL,可以在Web.config文件中设置标记的loginUrl属性。实际上,链接不会附加到querystring@Farzi. 您是否使用自定义授权属性,或者创建它并在OnActionExecuting方法中检查用户是否经过身份验证。如果已验证,则不执行任何操作,如果未验证,则获取url引用者,并通过提供带有引用者url的查询字符串returnUrl将用户重定向到登录页面。还要验证推荐人url,确保推荐人仅来自同一域。您可以使用全局注册此筛选器。然后,您可以按照我在回答中建议的步骤进行操作。您只需要在整个请求中持久化returnUrl,并且它应该可以进行小的更改。见下面我的答案。