Ответ 1
Я думаю, вы можете использовать ActionFilterAttribute
. См. Документацию: Создание пользовательских фильтров действий.
В вашем случае вы можете использовать следующий образец (на С#, так как мои навыки VB устарели). Он переопределяет любой заголовок запроса Content-Type
с использованием значения application/json. Обратите внимание, что вам может потребоваться усилить его, чтобы поддерживать все типы HttpContent
(например, я не думаю, что это нужно использовать для запросов MultiPart).
public class UpdateRequestAttribute: ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
actionContext.Request.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
base.OnActionExecuting(actionContext);
}
}
Затем вы добавляете этот атрибут в свой класс контроллера, например:
[UpdateRequest]
public class HomeController : ApiController
{
//[...]
}
В этом случае все запросы к контроллеру Home будут иметь переопределенные Content-Type
.
В качестве альтернативы вы также можете написать настраиваемый HTTP-обработчики сообщений, который называется очень рано в конвейере и не будет ограничен конкретным контроллером, Проверьте следующее изображение, чтобы понять, как обрабатывается запрос сервером.
Например, этот обработчик сообщения будет устанавливать запрос Content-Type
в application/json, если он в настоящее время пуст.
public class CustomMessageHandler : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
if (request.Content.Headers.ContentType == null)
{
request.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
}
return base.SendAsync(request, cancellationToken);
}
}
Наконец, вот как обновить WebApiConfig
, чтобы добавить обработчик сообщения в конвейер:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MessageHandlers.Add(new CustomMessageHandler());
// Other configuration not shown...
}
}