我有一个Create POST操作,在我的控制器中没有GET操作。在我的AccountController中,我有一个Login操作,当传递给查询时返回ReturnUrl。问题是,由于Create没有Get动作,我得到404。
你有什么建议吗?
答案 0 :(得分:0)
您可能希望查看Explained: Forms Authentication in ASP.NET 2.0,它基本上解释了ASP.Net来自身份验证的工作原理,然后使用反射器来反汇编命名空间{{1}下的类FormsAuthenticationModule
和FormsAuthentication
在System.Web.Security
中了解ASP.Net Forms身份验证的工作原理并重写它以获得最佳效果。
基本上,您需要修改重定向的代码以添加以下功能
System.Web.dll
,提取帖子数据并将其与System.Guid.NewGuid()
System.Web.HttpContext.Current.Cache[<key>]
更改为<Path to login page.aspx>?ReturnUrl=<Url>
<Path to login page.aspx?RequestId=<key>
和System.Web.Security.FormsAuthentication.RedirectToLoginPage
可能是您需要编辑的内容。您可以使用System.Web.Security.FormsAuthentication.GetRedirectUrl
这可能是繁琐而微妙的工作,因为Microsoft代码变得如此复杂,如果你无法获得.Net源代码(我不确定微软是否还提供它)或者(免费)反射器,这可能是不可能的。许可证。
或者,您可以编写自定义IHttpModule,执行以下操作:
System.Web.HttpContext.Current.Request
变量然后,
Session
之前执行,否则将无效。您可以从Walkthrough: Creating and Registering a Custom HTTP Module开始。
如果您的用户决定同时进行多次发布,则此方法可能会导致一些问题,因为第二个请求将覆盖FormsAuthenticationModule
中的数据。
以上两种选择是直接处理你问题的方法。如果将Post控制器更改为Get,可能会更容易。上述方法不值得,除非您有大量页面遇到相同的问题或者您想尝试使用ASP.Net。