Yanıt mesajı şeklini özelleştirmek istiyorsanız, kendi eylem sonucunuzu yazmanız gerekir.
Basit boş 404'ler gibi şeyler için kutudan çıkan en yaygın yanıt mesajı şekillerini sağlamak istedik, ancak bu sonuçları olabildiğince basit tutmak istedik; Eylem sonuçlarını kullanmanın temel avantajlarından biri, eylem yönteminizin birim testini çok daha kolay hale getirmesidir. Eylem sonuçlarına ne kadar çok özellik koyarsak, eylem yönteminin beklediğiniz şeyi yaptığından emin olmak için birim testinizin o kadar çok şeyi dikkate alması gerekir.
Sık sık özel bir mesaj sağlama yeteneğini de istiyorum, bu nedenle bu eylemin gelecekteki bir sürümle sonuçlanmasını desteklemeyi düşünmemiz için bir hata kaydetmekten çekinmeyin:
https://aspnetwebstack.codeplex.com/workitem/list/advanced
Bununla birlikte, eylem sonuçlarıyla ilgili güzel bir şey, biraz farklı bir şey yapmak istiyorsanız, her zaman oldukça kolay bir şekilde kendi yazınızı yazabilmenizdir. Sizin durumunuzda bunu nasıl yapabileceğiniz aşağıda açıklanmıştır (hata mesajını metin / düz olarak istediğinizi varsayarak; JSON istiyorsanız, içerikle biraz farklı bir şey yaparsınız):
public class NotFoundTextPlainActionResult : IHttpActionResult
{
public NotFoundTextPlainActionResult(string message, HttpRequestMessage request)
{
if (message == null)
{
throw new ArgumentNullException("message");
}
if (request == null)
{
throw new ArgumentNullException("request");
}
Message = message;
Request = request;
}
public string Message { get; private set; }
public HttpRequestMessage Request { get; private set; }
public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
return Task.FromResult(Execute());
}
public HttpResponseMessage Execute()
{
HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.NotFound);
response.Content = new StringContent(Message);
response.RequestMessage = Request;
return response;
}
}
public static class ApiControllerExtensions
{
public static NotFoundTextPlainActionResult NotFound(this ApiController controller, string message)
{
return new NotFoundTextPlainActionResult(message, controller.Request);
}
}
Ardından, eylem yönteminizde şöyle bir şey yapabilirsiniz:
public class TestController : ApiController
{
public IHttpActionResult Get()
{
return this.NotFound("These are not the droids you're looking for.");
}
}
Özel bir denetleyici temel sınıfı kullandıysanız (doğrudan ApiController'den miras almak yerine), "bunu" da ortadan kaldırabilirsiniz. bölüm (maalesef bir uzantı yöntemi çağrılırken gereklidir):
public class CustomApiController : ApiController
{
protected NotFoundTextPlainActionResult NotFound(string message)
{
return new NotFoundTextPlainActionResult(message, Request);
}
}
public class TestController : CustomApiController
{
public IHttpActionResult Get()
{
return NotFound("These are not the droids you're looking for.");
}
}