2017-01-31 6 views
0

Hallo Ich entwickle eine Anwendung mit Web API 2 und Zugriff auf Anrufe über angularjs. Ich erstellte Web-API-Anrufe und gehostet in IIS-Server (öffentliche IP). Ich greife auf die web api2-Methoden im folgenden Format zu.Nicht in der Lage, auf Web-API-Aufrufe in einem API/Controller-Format zuzugreifen

$http.post('http://111.93.133.98:4500/api/NCT_Login/', credentials).success(function (response) { alert(response); }); 

Dies ist meine Web-API-Datei config.cs.

routeTemplate: "api/{controller}/{id}" 

Dies ist mein Controller-Code.

public class NCT_LoginController : ApiController 
{ 
    public NCTEntities entityObject = new NCTEntities(); 
    [EnableCors(origins: "*", headers: "*", methods: "GET, POST, PUT, DELETE")] 

    public IHttpActionResult Post(LoginClass obj) 
    { 
     try 
     { 
      if (ModelState.IsValid) 
      { 
       obj.User_Password = PasswordEncryption.sha256_hash(obj.User_Password); 
       bool result = (from c in entityObject.NCT_UserRegistration where obj.User_Name ==c.User_Name && obj.User_Password == c.User_Password select c).Any(); 
       if(result==true) 
       { 

        obj.UserRole = (from c in entityObject.NCT_UserRegistration where obj.User_Name == c.User_Name && obj.User_Password == c.User_Password select c.User_Role).FirstOrDefault(); 
        obj.Success = 0; 
        obj.User_Password = ""; 
        var response = Request.CreateResponse(HttpStatusCode.OK, obj); 
        var newSessionId = new SessionIDManager().CreateSessionID(HttpContext.Current); 
        var cookie = new CookieHeaderValue("session-id", newSessionId); 
        cookie.Expires = DateTimeOffset.Now.AddDays(1); 
        cookie.Domain = Request.RequestUri.Host; 
        cookie.Path = "/"; 
        response.Headers.AddCookies(new[] { cookie }); 
        return ResponseMessage(response); 
       } 
       else 
       { 
        return Content(HttpStatusCode.BadRequest, 1); 
       } 

      } 
      else 
      { 
       return Content(HttpStatusCode.BadRequest, 1); 
      } 
     } 
     catch (DbEntityValidationException e) 
     { 
      foreach (var eve in e.EntityValidationErrors) 
      { 
       Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:", 
        eve.Entry.Entity.GetType().Name, eve.Entry.State); 
       foreach (var ve in eve.ValidationErrors) 
       { 
        Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"", 
         ve.PropertyName, ve.ErrorMessage); 
       } 
      } 
      throw; 
     } 
    } 

Wenn i api von Route Vorlage entferne ich bin in der Lage api zugreifen und wenn ich api.NCT_Login setzen dann Preflight-Fehler Ich erhalte. Ich bin mir nicht sicher, was ich hier vermisse. Jede Hilfe wäre willkommen. Vielen Dank.

+0

Bitte teilen Sie die komplette Controller-Klasse –

+0

Vielen Dank. Ich habe aktualisiert. –

+0

Wir brauchen auch den Namen der Controller-Klasse :) –

Antwort

0

würde ich die Post-Methode mit einem Attribut Route wie diese

[RoutePrefix("api/NCT_Login")] 
public class NCT_LoginController : ApiController 
{ 
    public NCTEntities entityObject = new NCTEntities(); 
    [EnableCors(origins: "*", headers: "*", methods: "GET, POST, PUT, DELETE")] 

    [Route("Login")] 
    [HttpPost] 
    public IHttpActionResult Post(LoginClass obj) 
    { 

dekorieren Dieses um die Strecke zu api/NCT_Login/Login

IMO ist es eine gute Praxis attribute routing zu verwenden setzen würde, da es sehr klar wird, was jede Methode Route ist. Auch wenn Controller wächst einfach zu definieren neue Routen auf dem gleichen http verb

+0

Stellen Sie sicher, dass er Attribut-Routing in der API-Konfiguration aktiviert hat, und Sie können '[Route()]' für die Login-Aktion beibehalten, so dass er es an 'api/NCT_Login /' selbst senden kann. – Developer

+0

Vielen Dank. So kann ich wie folgt treffen. http://111.93.133.98:4500/api/NCT_Login/Login. –

+0

@Developer ist nicht Attribut Routing standardmäßig in Web API 2 aktiviert? –

Verwandte Themen