2014-02-19 43 views
1

我正在嘗試使用基於表單的身份驗證創建web api。我想從客戶端登錄並從那裏檢索數據。當我登錄時,用戶通過http request直接進入地址欄,如localhost:1393/api/Game獲得認證並可以檢索數據。但是,當我嘗試從客戶端獲得它時,我得到一個401 (Unauthorized error)。我在服務器端啓用了CORS。這是控制器處理數據ASP.NET WEB API表單身份驗證錯誤

using System; 
using System.Collections.Generic; 
using System.Data; 
using System.Data.Entity.Infrastructure; 
using System.Linq; 
using System.Net; 
using System.Net.Http; 
using System.Web; 
using System.Web.Http; 

using System.Web.Security; 
using Cheeky_backend.Models; 
using System.Web.Http.WebHost; 


namespace Cheeky_backend.Controllers 
{ 
    public class Demo 
    { 
     public List<Teams> team { get; set; } 
     public List<Hole> hole { get; set; } 
    } 

    [Authorize] 
    public class GameController : ApiController 
    { 

     private Cheeky_backendContext db = new Cheeky_backendContext(); 



     // GET api/Game 
     public IEnumerable<Hole> GetHoles() 
     { 
      return db.Holes.AsEnumerable(); 
     } 


    } 

} 

這爲認證CONTROLER

using System; 
using System.Collections.Generic; 
using System.Data; 
using System.Data.Entity.Infrastructure; 
using System.Linq; 
using System.Net; 
using System.Net.Http; 
using System.Web; 
using System.Web.Security; 
using System.Web.Http; 
using Cheeky_backend.Models; 

namespace Cheeky_backend.Controllers 
{ 
    public class UserController : ApiController 
    { 
     private Cheeky_backendContext db = new Cheeky_backendContext(); 

     // GET api/Default1 


     // GET api/Default1/5 


     // PUT api/Default1/5 

     // POST api/Default1 

     public HttpResponseMessage CreateUser(User user) 
     { 
      if (ModelState.IsValid) 
      { 
       db.Users.Add(user); 
       db.SaveChanges(); 

       HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, user); 
      // response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = user.ID })); 
       return response; 
      } 
      else 
      { 
       return Request.CreateResponse(HttpStatusCode.BadRequest); 
      } 
     } 

     // DELETE api/Default1/5 

     public HttpResponseMessage Login(User user) 
     { 
      var userfound = from user2 in db.Users 
          where user.username == user2.username && user.password == user2.password 
         select user2; 

      if(userfound.Any()) 
      { 
       FormsAuthentication.SetAuthCookie(user.username, true); 
       return Request.CreateResponse(HttpStatusCode.OK,user); 
      } 
      return Request.CreateResponse(HttpStatusCode.Unauthorized); 
     } 


    } 
} 

回答

0

Source

在你認證處理器

  • 不要設置校長Thread.CurrentPrinicipal更多。
  • HttpRequestContext上使用Principal

看看here