2017-01-31 55 views
0

您好我正在開發使用Web API2,並透過angularjs調用一個應用程序來訪問Web API調用。我創建了web API調用並託管在iis服務器(公共ip)中。我以下面的格式訪問web api2方法。無法在API /控制器格式

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

這是我的web api config.cs文件。

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

這是我的控制器代碼。

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; 
     } 
    } 

如果我刪除從路徑模板API我能夠訪問API的,如果我把api.NCT_Login然後我得到的預檢錯誤。我不確定我在這裏錯過了什麼。任何幫助,將不勝感激。謝謝。

+0

請分享完整的控制器類 –

+0

謝謝。我更新了。 –

+0

我們還需要控制器類的名稱:) –

回答

0

我會裝點POST方法,像這樣

[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) 
    { 

一個屬性路線這將設置爲api/NCT_Login/Login

路線IMO它是一個很好的做法,使用attribute routing,因爲它得到非常清楚每種方法路線是。 另外當控制器增長很容易定義新的路線上相同的動詞

+0

確保他在api配置中啓用了屬性路由,並且可以爲Login操作保留'[Route()]',以便可以將它張貼到'api/NCT_Login /'本身:) – Developer

+0

謝謝。所以我可以擊中如下。 http://111.93.133.98:4500/api/NCT_Login/Login。 –

+0

@開發者是不是默認web api 2啓用屬性路由選擇? –