2016-05-28 1 views
1

Ich habe eine Web-API in vs 2015. Da mein UI Projekt getrennt ist, habe ich definieren diese vor der Controller-Klasse Attribute:Zwei Routenattribute für die Klasse und ihre Methode?

[EnableCors("AllowAll")] 
    [Route("api/[controller]")] 
    public class myController : Controller 
    { 
     ... 

In diesem Controller ich eine Methode, die einige Daten kamen von Client einfügen würde Seite HTTP-Anfrage. Ich möchte es "Add" (und nicht "Post") nennen. Ich möchte diese Methode in post Anfrage aufrufen. So fügte ich die [HttpPost] wie folgt:

[HttpPost] 
    public object Add(string title, string myStruct) 
    { 

Wie kann ich feststellen, dass dies meine Post-Methode?
Soll ich vor der Methodendefinition [Route("api/[controller]/define")] verwenden ?!
Kann ich das Routing von diesem Status aus weiterleiten?
Meine URL ist

http://localhost:54848/#/myController/define 
+0

Ich verstehe wirklich nicht. Können Sie erklären, was Ihr tatsächliches Problem ist und was Sie erreichen möchten? Warum zeigen Sie in Ihrer Frage einen Client-bezogenen URI an (warum der Hash im URI, wenn Ihr Problem mit der Web-API zusammenhängt)? –

+0

Was meinen Sie mit "Wie kann ich feststellen, dass dies meine Topfmethode ist?" Außerdem können Sie keine '#' in einer URL haben. Nun, Sie können einen haben, aber er wird nicht an Ihren Code weitergegeben. – DavidG

+0

das ist die URL im Browser und ich benutze angularJS, also habe ich #. Ich möchte einen benutzerdefinierten Methodennamen haben und den Post oder einen anderen Namen mit dem Präfix Post nicht verwenden. Also habe ich zuerst [HttpPost] hinzugefügt, aber ich muss auch das akzeptable Routing definieren. Dann weiß ich nicht, ob ich den akzeptablen Router von Anfang an einstellen soll oder nicht (da ich das eine Stufe höher erwähnt habe, vor der Klasse) – Elnaz

Antwort

1

Ihre Frage nicht klar ist, werde ich von zu beantworten versuchen, alles, was ich verstanden. Sie sollten Attribut Route in Ihrem Controller-Methode wie folgt dem Hinzufügen:

[EnableCors("AllowAll")] 
[Route("api/exampleController")] 
public class exampleController : Controller 
{ 
    ... 

[HttpPost] 
[Route("add")] 
public object Add(string title, string myStruct) 
{ 
    ... 
} 
} 

Die URL für api Aufruf sollte dann so etwas wie diese: http://www.example.com/api/exampleController/add

Die URL, die Sie in Ihrer Frage wie ein Routing sieht geschrieben Ihre api

$stateProvider.state('define', { 
     url: '/define', 
     templateUrl: 'page-posts-list.html', 
     controller: mycontroller 
    }); 

Sie dann aufrufen können post-Methode mit der uRL oben aus meinem Controller-Werk: url in Winkel sollten Sie, dass von $ stateproviders tun. Hoffe, das sollte dir helfen.

+0

denke ich genau, du hast die Frage richtig verstanden. Aber ich habe getan, wie du gesagt hast, aber ich habe Zugriff verweigert! (Access-Control-Allow-Origin) – Elnaz

+2

Sie müssen CORS in Ihrer API aktivieren. Geben Sie in Ihrer Paketmanager-Konsole "Install-Package Microsoft.AspNet.WebApi.Cors" ein. Fügen Sie config.EnableCors() hinzu; in der Methode Register() vor config.Routes.MapHttpRoute (...); der WebApiConfig.cs-Klasse. Add Attribut [EnableCors (Ursprünge: "*", Header: "*", Methoden: "*")] in der öffentlichen Klasse exampleController: Controller {....} und einmal versuchen. – Pushpendra

+0

Ich habe das am Anfang (für die Klasse) aktiviert. Es reicht nicht? – Elnaz

Verwandte Themen