2017-01-31 7 views
0

Привет Я разрабатываю одно приложение, используя веб-api2 и получая вызовы через angularjs. Я создал веб-api-вызовы и размещался на сервере iis (public ip). Я обращаюсь к веб-api2-методам в следующем формате.Не удается получить доступ к вызовам веб-api в формате api/controller

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

Это файл конфигурации 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.NCT_Login тогда я получаю предполетную ошибку. Я не уверен, чего здесь не хватает. Любая помощь будет оценена по достоинству. Спасибо.

+0

Просьба поделиться полным классом контроллера –

+0

Спасибо. Я обновил. –

+0

Нам также нужно имя класса контроллера :) –

ответ

0

Я бы украсить метод пост с маршрутом атрибута, как этот

[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, как он получает очень ясно, что каждый метод маршрут есть. Также, когда контроллеры растут, легко определить новые маршруты на одном и том же http-глаголе

+0

Убедитесь, что он активировал маршрутизацию атрибутов в конфигурации api, и вы можете сохранить '[Route()]' для действия входа, чтобы он мог отправить его в 'api/NCT_Login /' сам :) – Developer

+0

Спасибо. Поэтому я могу попасть, как показано ниже. http://111.93.133.98:4500/api/NCT_Login/Login. –

+0

@ Разработчик не является атрибутом маршрутизации включен по умолчанию в веб-api 2? –

 Смежные вопросы

  • Нет связанных вопросов^_^