2016-05-11 4 views
0

Ich habe 3 Methoden erstellt, um das Attribut-Routing zu testen.
Meine 2 GET-Methoden scheinen zu laufen, aber ich kann nicht verstehen, wie meine Post-Methode funktioniert.Routing-Problem oder Parameterproblem?

Ist meine Route falsch bei der Post-Methode oder übergebe ich falsch die falschen Daten an die Methode?

Mein Controller:

[RoutePrefix("api/myTest")] 
    public class JobController : ApiController 
    { 
     [Route("{id:int}")] 
     [HttpGet] 
     public string GetJob(int id) 
     { 
      return String.Format("Job-{0}", id.ToString()); 
     } 

     [Route("GetJob2/{id:int}")] 
     [HttpGet] 
     public string GetJob2(int id) 
     { 
      return String.Format("New and improved Job-{0}", id.ToString()); 
     } 

     [Route("NewJob/{data}")] 
     [HttpPost] 
     public HttpResponseMessage NewJob(HttpRequestMessage request) 
     { 
      // Read and process xml 
     } 
    } 

In meinem JS Ich habe:

$.get('api/myTest/' + $("#jobID").val()) // Works 
$.get('api/myTest/GetJob2/' + $("#jobID").val()) // Works 
var data = "<root><name>Bob</name></root>"; 
$.post('api/myTest/NewJob/', data) // Fails 404 Error 

UPDATE:

[Route("NewJob/{data}")] 
    [HttpPost] 
    public HttpResponseMessage NewJob(string request) 

UPDATE 2:

[Route("NewJob/{data}")] 
     [HttpPost] 
     public HttpResponseMessage NewJob(string data) 
     { 

     } 

var data = "<root><name>Bob</name></root>"; 
     $.post('api/myTest/NewJob/', data) 
     .done(function (result) { alert("done"); }) 
     .fail(function (xhr, status, err) { 
      alert(xhr.responseText); 
     }); 
+0

Der Parameter von 'NewJob' sollte' string' Typ sein. – aff

+0

Was ist der Fehler? Es gibt weitere Informationen nach dem "Fehler 404 Fehler" –

+0

Ich sehe nur 404 - nicht gefunden – PrivateJoker

Antwort

1

Direkt von Webapi Attribute Routing documentation und es gibt auch Tabelle der unterstützten Einschränkungen in der gleichen Verbindung.

Strecke Constraints

Routen Einschränkungen können Sie beschränken, wie die Parameter in der Routenvorlage abgestimmt sind. Die allgemeine Syntax lautet "{parameter: constraint}". Zum Beispiel:

[Route("users/{id:int}"] 
public User GetUserById(int id) { ... } 

[Route("users/{name}"] 
public User GetUserByName(string name) { ... } 

Hier wird die erste Route nur dann ausgewählt werden, wenn das "ID" Segment der URI eine ganze Zahl ist. Andernfalls wird die zweite Route ausgewählt.

Bei XML, Sie werden alle Daten durch url nicht vorbei, so ist dies, wie Sie Ihre Route ist

[Route("NewJob")] 
[HttpPost] 
public HttpResponseMessage NewJob(HttpRequestMessage data) 
{ 
       // Read and process xml 
} 

und XML angeben, in jQuery POST

var url = ""; 
var data = ""; 
$.ajax({ 
      contentType: "text/xml", 
      dataType: "xml", 
      type: "post", 
      url: url, 
      data: data 
     }); 

Weitere Ihr vorheriger Anruf war

$.post('api/myTest/NewJob/', data) it should be '+' instead of ',' 
$.post('api/myTest/NewJob/'+ data) 

niedriger würde man url ungültig geben, das ist 400 statt 404

+0

Immer noch 404 - Siehe bearbeiten – PrivateJoker

+0

@JDS können Sie die Änderungen überprüfen – brykneval

+0

Vielen Dank! Es macht jetzt diesen Anruf. – PrivateJoker

0

Was passiert, ist, dass Ihr Client eine Anfrage sendet, die einer Aktion mit dem Namen NewJob entsprechen sollte, aber der von Ihrer Aktion erwartete Param-Typ vom Typ HttpRequestMessage ist und der Parameter in der Anfrage vom Typ string ist.

So die diese Aktion ändern:

[Route("NewJob/{data}")] 
    [HttpPost] 
    public HttpResponseMessage NewJob(string data) 
    { 
     // Read and process xml 
    } 

Es sollte jetzt funktioniert.

+0

Ist das nicht die gleiche Sache, die ich oben habe? – PrivateJoker

+0

Ah, unsere Kommentare und Bearbeitungen haben sich gekreuzt. – PrivateJoker

+0

Ich bekomme immer noch die 404 ... – PrivateJoker

Verwandte Themen