Apakah mungkin untuk mengaktifkan pemeriksaan statis untuk pembantu tag?

Misalnya saya bisa menulis kode ini di template mvc default

<a asp-area="" asp-route-returnUrlFoo="foo" 
   asp-controller="Account" asp-action="RegisterFoo">Register</a>

Dan itu akan menghasilkan url yang salah

/Account/RegisterFoo?returnUrlFoo=foo

Apakah mungkin menimbulkan kesalahan ketika ada nama tindakan atau argumen rute yang salah?


person ais    schedule 28.05.2017    source sumber
comment
Untuk lebih jelasnya... /Account adalah Pengontrol yang valid dan /RegisterFoo adalah Tindakan yang tidak valid? Selain itu, Anda ingin host Anda memberikan pengecualian? Atau maksud Anda, merespons dengan Kode Status tertentu seperti 400 - Permintaan Buruk?   -  person Svek    schedule 28.05.2017
comment
@Svek Ya, RegisterFoo adalah Tindakan yang tidak valid. Ya, berikan pengecualian.   -  person ais    schedule 28.05.2017


Jawaban (1)


Metode Penggantian: "Secara Universal" Menangani Pengontrol dan Tindakan yang Tidak Cocok

Anda dapat menambahkan rute baru yang akan mengalihkan semua permintaan tidak valid ke pengontrol dan tindakan spesifik Anda:

app.UseMvc(routes =>
{
    // your other routes here

    routes.MapRoute(_
        name: "Fallback",
        url: "{*any}",
        defaults: new { controller = "Error", action = "Handler"});
}

Dalam kasus di atas, ini akan memetakan semuanya (yang tidak ditentukan) untuk menuju ke /Error/Handler. Anda dapat memodifikasinya untuk memenuhi kebutuhan Anda sendiri.

Anda dapat membaca selengkapnya tentang templat rute di sini:
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/routing#route-template-reference


Alternatif: Tangani per pengontrol

Tentu saja, ada alternatif lain yaitu menanganinya berdasarkan pengontrol saja. Pendekatan ini kurang umum dan akan memungkinkan Anda membuat cara yang lebih tepat sasaran untuk menangani kesalahan URI/perutean.

Alternatif: Periksa apakah pengontrol atau tindakan ada

string actionName = this.ControllerContext.RouteData.Values["action"].ToString();
string controllerName = this.ControllerContext.RouteData.Values["controller"].ToString();
person Svek    schedule 28.05.2017
comment
Saya tidak ingin /Account/RegisterFoo?returnUrlFoo=foo berfungsi, karena url ini salah. Saya hanya ingin Pengecualian. - person ais; 28.05.2017
comment
@ais Pengontrol Anda dapat mengeluarkan pengecualian. - person Svek; 28.05.2017
comment
Saya ingin Pengecualian ketika halaman dengan url ini sedang dirender - person ais; 29.05.2017
comment
@ais Saya telah menambahkan kemungkinan alternatif lain yang dapat Anda gunakan. Ini akan memungkinkan Anda untuk menempatkan pemeriksaan kesalahan tepat di tempat yang Anda inginkan. - person Svek; 29.05.2017