Soru ASP.NET MVC'de WebApi [FromUri] eşdeğeri nedir?


WebApi'de bir denetleyici eylemi üzerinde bir parametre oluşturabilirim [FromUri] URI 'serileştirilmiş' bileşenlerini, eğer bir POCO modeline dönüştürürseniz; aka model bağlama.

MVC'yi 2.0'dan beri kullanmaya rağmen, web siteleri için hiç kullanmadım (dunno why). ASP.NET MVC 5'de buna eşdeğer nedir?

Bir kitaplığa başvurmam gerekmedikçe, öznitelik IDE'de tanınmıyor gibi görünüyor.

isterim ki ~/thing/2014/9 aşağıdaki modele bağlamak için:

public class WhateverModel
{
    public int Year { get; set; }
    public int Month { get; set; }
}

Teşekkürler

Güncelleştirme

Diğer soruda (yukarıdaki bağlantı), OP diyor ki:

Ancak, bunu düz MVC olmayan WebApi'ye dönüştürün ve varsayılan model bağlayıcı bozulur ve yuvalanmış dizideki nesnelerdeki özellikleri bağlayamaz

Bu, WebApi'den özniteliği kullandığını ima eder. Sanırım. Bu referanslarım yok, çünkü MVC'deyim, yani (ab) WebApi'nin versiyonunu MVC'de kabul etmek için kabul edilen bir yol kullanıyor mu?

2. Güncelleme

Bu sorunun cevabında:

MVC model bağlayıcı adlandırma kurallarına uygun sorgu dizginizi oluşturmanız gerekir.

bunlara ek olarak [FromUri] MVC DefaultModelBinder tarafından bilinmediği için, örnek eyleminizdeki özellik tamamen yok sayılır.

Bu yüzden hala OP ile ilgili ne yapacağımı ya da neyi bilmediğimi bilemiyorum, eğer bu yanlış öznitelikte bir miktar başarı elde ederse.

Sanırım açık bir cevap vermeyi umuyorum ve diğer sorunun cevabı değil.


18
2018-02-27 13:32


Menşei


olası kopyası [FromUri] özelliğini kullanma - karmaşık nesneyi iç içe dizi ile bağlama - Sam
Merhaba Sam, sorudaki güncellememi görün. - Luke Puplett
Üzgünüm, sanırım şu soruyu anlamadım. Modelinizdeki tüm özellikler ilkel türler veya dizeler olduğu sürece, MVC'nin yerleşik model bağlama özelliğini kullanarak URI sorgu dizesiyle bağlamak için fazladan bir şey yapmanız gerekmez. CodeCaster'ın cevabı iyi çalışmalı. - Sam
Teşekkürler Sam, dedikodu konusunda endişelenme, meşru olmadı ama sanırım noktaları birleştiremedim. Yani diğer soruda, FromUri bir kırmızı-ringa balığıydı, "sadece çalışıyordu". - Luke Puplett


Cevaplar:


Sadece Çalışacak ™:

[HttpGet]
public ActionResult Thing(WhateverModel model)
{
    // use model
    return View();
}

En azından URL'yi kullanırken /thing?Year=2014&Month=9.

Sorun senin yönlendirme. URL /thing/2014/9 MVC'nin varsayılan rotasını kullanarak haritalamayacak, çünkü /{controller}/{action}/{id}, nerede {id} isteğe bağlı int.

En kolay özellik, yönlendirme yönlendirmesini kullanmaktır:

[HttpGet]
[Route("/thing/{Year}/{Month}"]
public ActionResult Thing(WhateverModel model)
{
    // use model
    return View();
}

Bu, URL'yi modelinize eşler.


25
2018-02-27 16:20



Sadece kendi sorumu cevaplamak için buraya döndüm, sadece çalışacağım :-) İmzada bir model taktım ve sadece yaptım. Zaten yönlendirme yönlendirmesini kullanıyordum, sen. Her neyse, mükemmel. Teşekkürler. Her zaman model bağlamanın vücuttaki yükler için olduğunu varsaydım. - Luke Puplett