3 回答
TA贡献1801条经验 获得超16个赞
您可以创建在检查内容类型的模型绑定之前执行的 ResourceFilter:
public class AddMissingContentType : Attribute, IResourceFilter
{
public void OnResourceExecuting(ResourceExecutingContext context)
{
context.HttpContext.Request.Headers["Content-Type"] = "application/json";
}
public void OnResourceExecuted(ResourceExecutedContext context)
{
}
}
并将其添加到您的方法中:
[AddMissingContentType]
[HttpDelete]
public async Task<IActionResult> Delete([FromBody]RequestData request)
{
}
TA贡献1847条经验 获得超11个赞
如果您将 ~app 用作代理、负载平衡器或其他您无法控制的东西背后的 API,也许可以将其转换为 POST...
示例:一些负载均衡器可以将主体的 DELETE 方法视为格式错误。但是,如果您对自己未来的环境有把握,为什么不...
编辑:答案是:即使有可能,也许最好遵循有时适用的规则,有时不要再有任何意外。(--无法评论我是新出生的用户)。
TA贡献1852条经验 获得超1个赞
一种解决方案是在控制器方法中手动获取主体。您可以检查内容类型是否存在,或者仅使用默认读取器(例如 json),然后以这种方式将其转换为您的模型。那么你不需要修改任何请求头
[HttpDelete]
public async Task Delete()
{
using (StreamReader reader = new StreamReader(request.Body, encoding))
{
var bodyContent = await reader.ReadToEndAsync();
if(!String.IsNullOrEmpty(bodyContent))
{
//mapp the bodyContent to your model
}
}
//perform the logic which should allways be done
}
注意:重要的是在方法签名中省略 FromBody 参数,否则当内容类型或正文丢失时绑定将失败
- 3 回答
- 0 关注
- 391 浏览
添加回答
举报