假设有两种方法可以通过文件或请求主体将数据发布到同一API端点。
是否可以通过同一资源的Accept标头将其路由到某个动作?
通过请求正文:
// Accept: application/json
[HttpPost]
public IActionResult PostText([FromBody]string text)
{
...
return new HttpOkResult();
}
按文件:
// Accept: application/x-www-form-urlencoded
[HttpPost]
public IActionResult PostFile(IFormFile file)
{
...
return new HttpOkResult();
}
为此使用动作约束。
动作约束
namespace WebApplication
{
public class PostDataConstraint : ActionMethodSelectorAttribute
{
public override bool IsValidForRequest(RouteContext routeContext, ActionDescriptor action)
{
var httpContext = routeContext.HttpContext;
var acceptHeader = //getting accept header from httpContext
var currentActionName = action.DisplayName;
if(actionName == "PostFile" and header == "application/x-www-form-urlencoded" ||
actionName == "PostText" and header == "application/json")
{
return true
}
return false;
}
}
}
动作:
// Accept: application/json
[HttpPost]
[PostData]
public IActionResult PostText([FromBody]string text)
{
...
return new HttpOkResult();
}
// Accept: application/x-www-form-urlencoded
[PostData]
[HttpPost]
public IActionResult PostFile(IFormFile file)
{
...
return new HttpOkResult();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句