C#学习教程:重定向后HttpPost到ReturnURL我正在使用actionfilter来确保用户已登录,如果没有登录,则将他们发送到登录页面并设置返回url。下面是我在动作过滤器中使用的代码。如果(!filterContext.HttpContext.User.Identity.IsAuthenticated){filterContext.Result=newRedirectResult(String.Concat("~/Account/LogOn","?ReturnUrl=",filterContext.HttpContext.Request.RawUrl));返回;在我的登录控制器中,我验证了用户凭据,然后对其进行签名并重定向到返回URLFormsAuth.SignIn(userName,rememberMe);如果(!String.IsNullOrEmpty(returnUrl)){返回重定向(returnUrl);我的问题是这将始终使用Get(HttpGet)请求,而我最初提交的是一个帖子(HttpPost),它应该始终是一个帖子。任何人都可以建议一种传递此URL的方法,包括HttpMethod或任何解决方法以确保使用正确的HttpMethod吗?没有简单的方法可以做到这一点。我建议您将未经身份验证的用户重定向到登录页面,而不是在发布到某个URL时,而是在请求将POST到经过身份验证的URL的表单时。如果您知道您提交给未经身份验证的用户的表单将POST到站点的经过身份验证的部分,那么请不要向他提供该表单。当请求此表单时,只需重定向到登录页面进行身份验证,一旦通过身份验证,就重定向到原始表单。这样您将确保只有经过身份验证的用户才能POST到受保护的资源。就自动POST请求(机器人、Web服务...)而言,向不提供凭据的请求返回一个简单的401状态代码应该绰绰有余。我想我明白为什么您只希望对出价POST操作进行身份验证。出价需要登录,但任何未登录的用户都可以看到拍卖页面。就像ebay/amazon等。在您需要基于用户的付款或操作之前,一切都是可见的。如果Request.RequestType是POST,则可以更改该属性以将Request.UrlReferrer返回到登录页面。然后他们将被重定向到拍卖页面,并且可以在登录后点击再次出价。您甚至可以使用UrlReferrer传递特定字段(例如金额),以便在金额字段到达时重新填充金额字段。拍卖页面。您可以从Request.Form集合中获取该字段。//使用中...[RequireLogin(AdditionalFields="amount,someotherfield")][HttpPost]publicActionResultBid(.....)//属性类RequireLoginAttribute:ActionFilterAttribute{publicstringAdditionalFields{get;放;}publicoverridevoidOnActionExecuting(ActionExecutingContextfilterContext){if(!filterContext.HttpContext.User.Identity.IsAuthenticated){varreturnUrl=filterContext.HttpContext.Request.RawUrl;if(filterContext.HttpContext.Request.RequestType){=="returnUrl=filterContext.HttpContext.Request.UrlReferrer.PathAndQuery;//在request中寻找FORM值附加到returnUrl//这可以很好的帮助用户体验(记住复选框/文本字段等)可以写两个同名的Controller方法,但是一个用于get,一个用于post,记住TempData(或session)中get方法中的ReturnUrl,然后在post请求到达时从TempData获取ReturnUrl:代码可能如下所示:}返回视图();}[HttpPost]publicActionResultLogOn(LogOnModelmodel,FormCollectioncollection){if(ModelState.IsValid){AuthenticationResultlogonStatus=TransactionScriptFactory.GetTransactionScript().LogOn(model.Email,model.Password);如果(logonStatus.AuthResult==AuthResultEnum.Success){FormsService.SignIn(logonStatus.User.UserId,logonStatus.User.NickName,false);objectreturnUrl=string.Empty;TempData.TryGetValue("ReturnUrl",outreturnUrl);字符串returnUrlStr=returnUrl作为字符串;如果(!string.IsNullOrEmpty(returnUrlStr)){返回重定向(returnUrlStr);}else{returnRedirectToAction("Index","Home");}}...当您第一次使用get操作到达页面时,它是绝对的,然后将数据发布到服务器我认为您也可以从Request.UrlReferrer获取整个url。以上就是C#学习教程:从HttpPost重定向到ReturnURL的所有分享内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权请点击右侧联系管理员删除。如需转载请注明出处:
