Angularjs 无法访问api/控制器格式的web api调用

Angularjs 无法访问api/控制器格式的web api调用,angularjs,asp.net-mvc-5,asp.net-web-api2,Angularjs,Asp.net Mvc 5,Asp.net Web Api2,您好,我正在使用web api2开发一个应用程序,并通过angularjs访问调用。我创建了web api调用并托管在iis服务器(公共ip)中。我正在访问以下格式的web api2方法 $http.post('http://111.93.133.98:4500/api/NCT_Login/', credentials).success(function (response) { alert(response); }); 这是我的web api config.cs文件 routeTempla

您好,我正在使用web api2开发一个应用程序,并通过angularjs访问调用。我创建了web api调用并托管在iis服务器(公共ip)中。我正在访问以下格式的web api2方法

 $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_登录,那么我将得到飞行前错误。我不确定我在这里错过了什么。任何帮助都将不胜感激。谢谢。

我会用这样一个属性路由来装饰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\u Login/Login

IMO使用它是一个很好的实践,因为它非常清楚每个方法路线是什么。
此外,当控制器增长时,在同一http谓词上定义新路由也很容易,请共享完整的控制器类。我们还需要控制器类名称:)抱歉。Api名称为NCT_LoginController。Mvc5控制器名称为Homecontroller。请确保他在api配置中启用了属性路由,并且您可以保留登录操作的
[Route()]
,以便可以将其发布到
api/NCT\u Login/
本身:)@Developer在web api 2中默认情况下未启用属性路由?@niranjangodOLE是,这将是正确的路线:)工作正常。非常感谢。