![](/img/trans.png)
[英]Upload files Asp.NET MVC 4 - Web API - Http Put verb/method
[英]asp net web api custom filter and http verb
我正在使用自定义过滤器来验证内容类型,例如:
public override void OnActionExecuting(HttpActionContext httpActionContext)
{
List<String> errors = new List<String>();
// a
if (httpActionContext.Request.Content.Headers.ContentType.MediaType == "application/json")
{
}
else
{
errors.Add("Invalid content type.");
}
// more checks
}
上面的代码工作正常,但验证应该检查请求http动词,因为它应该仅针对put或post验证内容类型。 我不想从httpget操作中删除自定义过滤器,因为我内部有更多检查,我不想将过滤器拆分为两部分,这意味着我必须检查过滤器内的http动词,但我可以找不到。
有小费吗?
您可以从中获取方法类型(post或put):
public override void OnActionExecuting(HttpActionContext actionContext)
{
string methodType = actionContext.Request.Method.Method;
if (methodType.ToUpper().Equals("POST")
|| methodType.ToUpper().Equals("PUT"))
{
// Your errors
}
}
如果需要通过过滤器验证请求的HTTP方法,则可以检查请求的Method属性:
var method = actionContext.Request.Method;
然而,我会建议你将过滤器拆开,因为你很快就会朝着一个泥球场的方向前进。
您确实应该使用控制器方法上方的标准HTTPVerb属性:
[HttpGet]
[HttpPut]
[HttpPost]
[HttpDelete]
[HttpPatch]
多个MVC控制器:
[AcceptVerbs(HttpVerbs.Get, HttpVerbs.Post)]
WebAPI Controlelrs for multiple
[AcceptVerbsAttribute("GET", "POST")]
在动作过滤器的构造函数中,您可以传入选项/命名参数,这些参数将设置OnActionExecuting
逻辑的设置。 根据这些设置,您可以切换逻辑。
public class MyActionFilterAttribute : ActionFilterAttribute
{
private HttpVerbs mOnVerbs;
public MyActionFilterAttribute(HttpVerbs onVerbs)
{
mOnVerbs = onVerbs;
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var currentVerb = filterContext.HttpContext.Request.HttpMethod;
if (mOnVerbs.HasFlag(HttpVerbs.Post)) { }
else if (mOnVerbs.HasFlag(HttpVerbs.Get)) { }
base.OnActionExecuting(filterContext);
}
}
[MyActionFilter(HttpVerbs.Get | HttpVerbs.Post)]
public ActionResult Index()
{
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.