WebAPI 不维护控制器上的 FormsAuthentication
WebAPI doesn't maintain FormsAuthentication over controllers
情况是这样的:
我拥有一个 AccountController,它继承自 ApiController,看起来像这样
[HttpPost]
[ActionName("Login")]
public HttpResponseMessage Login()
{
string emailOrUsername = base.Request.GetQueryNameValuePairs().ElementAt(0).Value;
FormsAuthentication.SetAuthCookie(emailOrUsername, false);
return Request.CreateResponse<string>(HttpStatusCode.OK, emailOrUsername);
}
[HttpGet]
[Authorize]
[ActionName("Logout")]
public HttpResponseMessage Logout()
{
FormsAuthentication.SignOut();
return Request.CreateResponse<string>(HttpStatusCode.OK, "Hope to see you again!");
}
我也有一个 MessageController,它也继承自 ApiController,看起来像这样:
[HttpPost]
[Authorize]
[ActionName("ReceiveMessage")]
public HttpResponseMessage ReceiveMessage()
{
return Request.CreateResponse<string>(HttpStatusCode.OK, "Successfully received your message");
}
因此,AccountController 工作正常,我登录并能够注销。
这是棘手和令人困惑的部分开始的地方。由于我在同一台计算机(本地主机)上进行测试,因此一旦获得授权,我就可以访问 ReceiveMessage。
到目前为止一切顺利。
我现在已经编辑了 Documents\IISExpress\config\applicationhost.config 并编辑了绑定:
绑定协议="http" bindingInformation=":60967:"
所以我可以从另一台设备访问我的 WebApi。我可以登录和注销,但我无法从这个新设备访问 ReceiveMessage(已登录)——而在本地主机上我可以做任何我想做的事。
我做错了什么? (这是一个示例,我计划让多个用户连接到 api,所以在某处设置静态变量不是一个选项)
浏览器明智地工作得很好,@charlie Brown 是正确的,问题与 cookie 相关——我是从一个统一应用程序访问它的
情况是这样的:
我拥有一个 AccountController,它继承自 ApiController,看起来像这样
[HttpPost]
[ActionName("Login")]
public HttpResponseMessage Login()
{
string emailOrUsername = base.Request.GetQueryNameValuePairs().ElementAt(0).Value;
FormsAuthentication.SetAuthCookie(emailOrUsername, false);
return Request.CreateResponse<string>(HttpStatusCode.OK, emailOrUsername);
}
[HttpGet]
[Authorize]
[ActionName("Logout")]
public HttpResponseMessage Logout()
{
FormsAuthentication.SignOut();
return Request.CreateResponse<string>(HttpStatusCode.OK, "Hope to see you again!");
}
我也有一个 MessageController,它也继承自 ApiController,看起来像这样:
[HttpPost]
[Authorize]
[ActionName("ReceiveMessage")]
public HttpResponseMessage ReceiveMessage()
{
return Request.CreateResponse<string>(HttpStatusCode.OK, "Successfully received your message");
}
因此,AccountController 工作正常,我登录并能够注销。 这是棘手和令人困惑的部分开始的地方。由于我在同一台计算机(本地主机)上进行测试,因此一旦获得授权,我就可以访问 ReceiveMessage。 到目前为止一切顺利。
我现在已经编辑了 Documents\IISExpress\config\applicationhost.config 并编辑了绑定: 绑定协议="http" bindingInformation=":60967:"
所以我可以从另一台设备访问我的 WebApi。我可以登录和注销,但我无法从这个新设备访问 ReceiveMessage(已登录)——而在本地主机上我可以做任何我想做的事。
我做错了什么? (这是一个示例,我计划让多个用户连接到 api,所以在某处设置静态变量不是一个选项)
浏览器明智地工作得很好,@charlie Brown 是正确的,问题与 cookie 相关——我是从一个统一应用程序访问它的