12

ASP.NET MVC4 Web API v1 denetleyicisi aşağıda tanımlanmıştır. 1 veya 2 sorgu dizesi parametrs kabul etmelidir.Web API'sini querystring parametresini tanımak için nasıl zorlanırsınız

Ancak, yöntem çağrılırsa ko parametresi her zaman boştur. İstek aşağıda. Klient veya namepart parametresinin sorgu dizesinde iletilebilmesi nasıl düzeltilir?

Web API v1 kontrolörü: Denetleyici isteği ile çağrılır

namespace MyApp.Controllers 
{ 
    public class CustomersSearchViewModel 
    { 
     public string Klient { get; set; } 
     public string Namepart { get; set; } 
    } 


    [Authorize] 
    public class CustomersController : ApiController 
     { 

     public HttpResponseMessage Get(CustomersSearchViewModel ko) 
      { 
      // why ko is null ?   
      var res = GetCustomers(ko.Klient,ko.Namepart); 
      return Request.CreateResponse(HttpStatusCode.OK, 
        new { customers = res.ToArray() }); 
      } 

     } 
    } 

(Appl erp virtal dizinden çalışıyorsa):

GET /erp/api/customers?namepart=kaks&_=1385320904347 HTTP/1.1 
Host: localhost:52216 
Connection: keep-alive 
Accept: application/json, text/javascript, */*; q=0.01 
X-Requested-With: XMLHttpRequest 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36 
Referer: http://localhost:52216/erp/Sale 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: et-EE,et;q=0.8,en-US;q=0.6,en;q=0.4 
Cookie: .myAuth=8B6B3CFFF3DF64EBEF3D258240D217C56603AF255C869FBB7934560D9F560659342DC4D1EAE6AB28454122A86C3CE6C598FB594E8DC84A; My_Session=5aw2bsjp4i4a5vxtekz 

varsayılan yönlendirme kullanılır:

config.Routes.MapHttpRoute(
     name: "DefaultApi", 
     routeTemplate: "api/{controller}/{id}", 
     defaults: new { id = RouteParameter.Optional } 
    ); 

Uygulama, Windows 2003 sunucusunu da çalıştırmalı ve böylece Web API v.2 kullanılamaz.

Güncelleme Ayrıca

public HttpResponseMessage Get(string klient, string namepart) 

ama 404 hatası döndürülür bu durumda

çalıştı, aksiyon bulunamadı.

+0

Parametrede '[FromUri]' özniteliğini denediniz mi? –

cevap

19

Karmaşık türleri bir isteğin vücuttan getirilen fakat böyle bu varsayılan davranışı değiştirebilirsiniz:

public HttpResponseMessage Get([FromUri]CustomersSearchViewModel ko) 

aksi çalışmaz bağlama, modeliniz özellikleri gibi adlandırılmış parametreleri içermelidir Kişisel querystring .

1

Diğer bir seçenek, özel bir tür sağlayıcıyı uygulamaktır. Bu, sorgu dizesindeki temsil üzerinde denetim yapılmasına izin verir ve işlem yönteminize [FromUri] özniteliğini eklemeniz gerekmediği anlamına gelir. Bu, karmaşık bir parametre türünün yaygın bir şekilde yeniden kullanılmasına veya özel bir gösterime gereksinim duymanız halinde mantıklıdır.

Bunun iyi bir örneği, her iki teknik kullanılarak enlem ve boylamla bir konumun uygulandığı this blog post'da verilir.