gpt4 book ai didi

asp.net-mvc - MVC3 : Use of ActionMethodSelectorAttribute causes HttpPostAttribute to be ignored

转载 作者:行者123 更新时间:2023-12-02 01:19:16 26 4
gpt4 key购买 nike

以下属性用于限制对 ajax 请求的操作的使用:

public class AjaxRequestAttribute : ActionMethodSelectorAttribute
{
public override bool IsValidForRequest(ControllerContext controllerContext, System.Reflection.MethodInfo methodInfo)
{
return controllerContext.HttpContext.Request.IsAjaxRequest();
}
}

我定义了以下 Controller 操作方法:

[AjaxRequest]
public ActionResult Login()
{
...
}

[HttpPost, AjaxRequest]
public ActionResult Login(LoginModel model, string returnUrl)
{
...
}

ajax post时出现以下错误:

The current request for action 'Login' on controller type 'AgentController' is ambiguous between the following action methods: System.Web.Mvc.ActionResult Login() on type NappWebsiteMvc.Controllers.AgentController System.Web.Mvc.ActionResult Login(NappWebsiteMvc.Models.Agent.LoginModel, System.String) on type NappWebsiteMvc.Controllers.AgentController

使用附加属性时,HttpPost 属性似乎被忽略。如果我从这两个方法中删除 AjaxRequest 属性,那么代码就可以工作。

正确的实现应该是什么?谢谢!

最佳答案

根据 Pawel 的要求,以下是代码:

public class AjaxGetAttribute : ActionMethodSelectorAttribute
{
public override bool IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo)
{
var isHttpGet = new AcceptVerbsAttribute(HttpVerbs.Get).IsValidForRequest(controllerContext, methodInfo);
return isHttpGet && controllerContext.HttpContext.Request.IsAjaxRequest();
}
}

public class AjaxPostAttribute : ActionMethodSelectorAttribute
{
public override bool IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo)
{
var isHttpPost = new AcceptVerbsAttribute(HttpVerbs.Post).IsValidForRequest(controllerContext, methodInfo);
return isHttpPost && controllerContext.HttpContext.Request.IsAjaxRequest();
}
}

关于asp.net-mvc - MVC3 : Use of ActionMethodSelectorAttribute causes HttpPostAttribute to be ignored,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8762910/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com