Stworzyłem niestandardowy segregator modelu MVC, który jest wywoływany dla każdego HttpPost
dostarczanego do serwera. Ale nie jest wywoływany dla żądań HttpGet
.Niestandardowy segregator dla ASP.NET MVC na żądanie GET
- Gdyby mój zwyczaj modelu spoiwo sprawdzony podczas
GET
? Jeśli tak, to za czym tęskniłem? - Jeśli nie, w jaki sposób mogę napisać niestandardowy kod obsługujący
QueryString
z żądaniaGET
?
Oto moja realizacja ...
public class CustomModelBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
// This only gets called for POST requests. But I need this code for GET requests.
}
}
Global.asax
protected void Application_Start()
{
ModelBinders.Binders.DefaultBinder = new CustomModelBinder();
//...
}
szukałem do tych rozwiązań, ale nie dość pracy za co jestem poszukuje:
- Trwałe typy złożone przez
TempData
- Korzystanie domyślny spoiwo do budowania złożonych typów (
?Name=John&Surname=Doe
)
uwaga na odpowiedź
Dzięki @Felipe za pomoc. Na wszelki wypadek, gdyby ktoś zmaga się z tym samym, ja nauczyłem:
- Zwyczaj modelu spoiwo CAN być wykorzystywane do
GET
wniosków - Ty CAN użycie
DefaultModelBinder
klasa - Mój szkopuł, że akcja metoda MUSI mieć parametr (w przeciwnym razie moduł pomijania modelu zostanie pominięty dla żądań
GET
, co ma sens, gdy się nad tym zastanowić)
można wykorzystać [OnActionExecuting] (https://msdn.microsoft .com/en-us/library/dd493080% 28v = vs.98% 29.aspx) w celu filtrowania każdego żądania iw tej metodzie można uzyskać ciąg zapytania za pomocą 'Request'. –
@JSantosh, załóżmy, że to zrobiłem i zdobyłem 'QueryString' w' OnActionExecuting'. Nie byłabym w stanie przetłumaczyć QueryString na obiekt i przekazać go jako parametr do metody akcji, prawda? Co pozostawia mnie w tym samym położeniu. –
W żądaniu pocztowym otrzymujesz dane jako obiekt, który jest automatycznie analizowany w odpowiednim modelu, ale w przypadku uzyskania danych w postaci ciągu znaków, nie jestem pewien, czy możesz to osiągnąć. i dobre pytanie :) –