【问题标题】:ASP.NET WEB API Forms Authentication ErrorASP.NET WEB API 表单身份验证错误
【发布时间】:2014-03-19 17:14:11
【问题描述】:

我正在尝试使用基于表单的身份验证创建web api。我想从客户端登录并从那里检索数据。当我登录时,用户通过身份验证并可以通过将http request 直接输入地址栏来检索数据,例如localhost:1393/api/Game。但是当我尝试从客户那里得到它时,我得到了一个401 (Unauthorized error)。我在服务器端启用了 CORS。这是处理数据的控制器

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


    }

}

这是身份验证控制器

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


    }
}

【问题讨论】:

    标签: c# .net forms authentication asp.net-web-api


    【解决方案1】:

    Source

    在您的身份验证处理程序

    • 不要再在 Thread.CurrentPrinicipal 上设置 Principal。
    • HttpRequestContext 上使用Principal

    看看here

    【讨论】:

      猜你喜欢
      • 2012-06-16
      • 2017-10-22
      • 1970-01-01
      • 2015-09-17
      • 2017-07-30
      • 2016-12-22
      • 1970-01-01
      • 2013-10-05
      • 2014-06-02
      相关资源
      最近更新 更多