Saya mencoba mengatur rute ke tindakan pengontrol MVC saya dengan templat berikut:

[Route("app/{appId:length(20)}/validate/{version}")]

Idenya adalah bahwa URL yang dihasilkan kemudian akan terlihat seperti ini: (Saya menambahkan spasi untuk membuat url localhost coba tidak diselesaikan ...)

http:// /localhost:2642/api/update/v1/app/6A6EE0B355C34DBFB381/validate/1.0.0.0

Masalah yang saya miliki adalah ini akan memberi saya kesalahan 404.

Jika saya menghapus atribut Route dan menggunakan perutean MVC bawaan, itu berfungsi. urlnya kemudian adalah:

http:// /localhost:2642/api/external/CheckForUpdate?appId=6A6EE0B355C34DBFB381&version=1.0.0.0

Ini seharusnya berfungsi karena saya tahu Nuget memiliki versi di URL mereka, tetapi saya pikir mereka menggunakan router MVC bawaan.

Saya juga mencoba menambahkan markup :regex() di templat untuk rute jadi validasi format string, tetapi itu tidak berhasil. Jika saya memasukkan string normal atau nilai seperti 1_0_0_0 itu berfungsi. Masalahnya saya tidak ingin melalui upaya untuk memanipulasi string versi sebelum mengirimnya ke api dan kemudian di api itu sendiri.

Adakah ide tentang apa yang saya lakukan salah?

1
mieliespoor 21 Juli 2016, 17:41

1 menjawab

Jawaban Terbaik

Jika Anda membuat atribut perutean Anda

[Route("app/{appId:length(20)}/validate/{version:regex(^([1-9]\\d+|[0-7])(\\.\\d{1,3}){0,3}$)}")]

Dan pastikan Anda menerima parameter dalam metode

public Task<IHttpActionResult> Get(string appId, string version)
{
    //magic
}

Lalu di bagian web.config, system.webServer > handlers ubah *. menjadi *

<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

Untuk

<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*" verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

Dan juga pastikan

<modules runAllManagedModulesForAllRequests="true">

Ada di <system.webServer>

1
PMC 21 Juli 2016, 18:03
Saya mengeluarkan bagian regex untuk saat ini karena tampaknya juga memberikan hasil 404. Ini bukan akhir dari dunia meskipun seperti itu bekerja sekarang.
 – 
mieliespoor
21 Juli 2016, 18:15
Saya mengujinya dan berhasil, jika Anda memasukkan lebih banyak detail dari tanda tangan metode dan bagian server web dari web.config, sesuatu mungkin menonjol
 – 
PMC
21 Juli 2016, 19:02