Saya perlu menerapkan metode WebAPI berikut:
/api/books?author=XXX&title=XXX&isbn=XXX&somethingelse=XXX&date=XXX
Semua parameter string kueri bisa nol. Artinya, pemanggil dapat menentukan dari 0 hingga semua 5 parameter.
Dalam MVC4 beta saya biasa melakukan hal berikut:
public class BooksController : ApiController
{
// GET /api/books?author=tolk&title=lord&isbn=91&somethingelse=ABC&date=1970-01-01
public string GetFindBooks(string author, string title, string isbn, string somethingelse, DateTime? date)
{
// ...
}
}
MVC4 RC tidak berperilaku seperti ini lagi. Jika saya menentukan kurang dari 5 parameter, itu menjawab dengan 404
pepatah:
Tidak ditemukan tindakan pada 'Buku' pengontrol yang cocok dengan permintaan.
Apa tanda tangan metode yang benar untuk membuatnya berperilaku seperti dulu, tanpa harus menentukan parameter opsional dalam perutean URL?
c#
url
asp.net-web-api
query-string
frapontillo
sumber
sumber
Get
itu secara otomatis terikat denganHTTP GET
metode ...string?
bukan tipe yang valid. Anda tidak dapat mendeklarasikanstring
sebagai tipe nullable karena ini adalah tipe referensi.Jawaban:
Masalah ini telah diperbaiki dalam rilis reguler MVC4. Sekarang Anda bisa melakukannya:
dan semuanya akan bekerja di luar kotak.
sumber
null
dianggap sebagai ekspresi konstan , dan karenanya merupakan nilai default yang valid .Dimungkinkan untuk melewati beberapa parameter sebagai model tunggal seperti yang disarankan vijay. Ini berfungsi untuk DAPATKAN ketika Anda menggunakan atribut parameter FromUri. Ini memberitahu WebAPI untuk mengisi model dari parameter kueri.
Hasilnya adalah tindakan kontroler bersih dengan hanya satu parameter. Untuk informasi lebih lanjut, lihat: http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api
Bahkan mendukung banyak parameter, selama properti tidak saling bertentangan.
Pembaruan :
Untuk memastikan nilainya opsional, pastikan untuk menggunakan jenis referensi atau nullables (mis. Int?) Untuk properti model.
sumber
int Skip
) dan tidak ada param kueri untuk properti yang ditentukan, metode Pengontrol API masih akan berhasil mencocokkan permintaan dan nilaiSkip
hanya akan menjadi nilai default untuk jenis itu, atau 0 dalam hal iniGunakan nilai default awal untuk semua parameter seperti di bawah ini
sumber
DateTime
tidak dapat dibatalkan. Saya sudah mencoba menggunakanDateTime?
sebagai gantinya, tetapi kemudian MVC tidak memetakan permintaan ke metode yang diberikan jika saya hanya menetapkan beberapa parameter dalam permintaan HTTP saya.DateTime
bukan nullable tipe data. Kode Anda tidak boleh dikompilasi, karena Anda tidak akan dapat menetapkannull
nilai ke parameter tipeDateTime
. Mungkin, Anda harus mengubahnyaDateTime?
, atau menggunakan nilai berbeda untuk default sepertiDateTime.Now
.Datetime.Now
tidak dapat digunakan dalam inisialisasi parameter default, saya berdiri dikoreksi.jika Anda ingin melewati beberapa parameter maka Anda dapat membuat model alih-alih melewati beberapa parameter.
jika Anda tidak ingin melewati parameter apa pun maka Anda dapat melewati juga di dalamnya, dan kode Anda akan terlihat rapi dan bersih.
sumber
Nilai default tidak dapat diberikan untuk parameter yang tidak dideklarasikan '
optional
'Di Anda
WebApiConfig
sumber