Jika Anda mewarisi dari basis NegotitatedContentResult<T>
, seperti yang disebutkan, dan Anda tidak perlu mengubah content
(misalnya Anda hanya ingin mengembalikan string), maka Anda tidak perlu mengganti ExecuteAsync
metode ini.
Yang perlu Anda lakukan adalah memberikan definisi tipe yang sesuai dan konstruktor yang memberi tahu basis Kode Status HTTP mana yang akan dikembalikan. Segala sesuatu yang lain hanya berfungsi.
Berikut adalah contoh untuk keduanya NotFound
dan InternalServerError
:
public class NotFoundNegotiatedContentResult : NegotiatedContentResult<string>
{
public NotFoundNegotiatedContentResult(string content, ApiController controller)
: base(HttpStatusCode.NotFound, content, controller) { }
}
public class InternalServerErrorNegotiatedContentResult : NegotiatedContentResult<string>
{
public InternalServerErrorNegotiatedContentResult(string content, ApiController controller)
: base(HttpStatusCode.InternalServerError, content, controller) { }
}
Dan kemudian Anda dapat membuat metode ekstensi yang sesuai untuk ApiController
(atau melakukannya di kelas dasar jika Anda memilikinya):
public static NotFoundNegotiatedContentResult NotFound(this ApiController controller, string message)
{
return new NotFoundNegotiatedContentResult(message, controller);
}
public static InternalServerErrorNegotiatedContentResult InternalServerError(this ApiController controller, string message)
{
return new InternalServerErrorNegotiatedContentResult(message, controller);
}
Dan kemudian mereka bekerja seperti metode bawaan. Anda dapat memanggil yang sudah ada NotFound()
atau Anda dapat memanggil kebiasaan baru Anda NotFound(myErrorMessage)
.
Dan tentu saja, Anda dapat menyingkirkan jenis string "hard-code" dalam definisi jenis kustom dan membiarkannya generik jika Anda mau, tetapi Anda mungkin harus mengkhawatirkan ExecuteAsync
hal - hal tersebut, bergantung pada apa <T>
sebenarnya Anda .
Anda dapat melihat di atas kode sumber untuk NegotiatedContentResult<T>
melihat semua yang dilakukannya. Tidak banyak untuk itu.