için ekstra yönlendirme yapmak istemiyorum
Bir alıcıyı geçersiz kılmak için DelegatingHandler'u kullanmaya ne dersiniz?
public class MediaTypeDelegatingHandler : DelegatingHandler
{
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
var url = request.RequestUri.ToString();
//TODO: Maybe a more elegant check?
if (url.EndsWith(".json"))
{
// clear the accept and replace it to use JSON.
request.Headers.Accept.Clear();
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
}
else if (url.EndsWith(".xml"))
{
request.Headers.Accept.Clear();
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml"));
}
return await base.SendAsync(request, cancellationToken);
}
}
Ve yapılandırmasında
:
GlobalConfiguration.Configuration.MessageHandlers.Add(new MediaTypeDelegatingHandler());
Ve denetleyicisi:
public class FooController : ApiController
{
public string Get()
{
return "test";
}
}
Ve http://yoursite.com/api/Foo/?.json
giderseniz dönmelidir:
"test"
iken Kontrolör .json-parametresini beklemediğini beri, hala rota parametre girişini işlemek gerekir Not:
<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">test</string>
Düzenleme dönmelidir. Bu yüzden ?
gerekli olabilir.
Olası kopya: http://stackoverflow.com/questions/13053485/return-either-xml-or-json-from-mvc-web-api-based-on-request – smoksnes
Bunu gördüm ... Ama bu Her API –
için ekstra yönlendirme gerektirir İçerik türü ayarlanarak da yapılabilir. Bu bir seçenek mi yoksa rotada mı olmalı? – smoksnes