我在想是否有办法只对特定ASP.NetWebneneneba API控制器的特定操作启用Windows身份验证。我的Web API Web服务有几个控制器,它们有许多操作,但只有一个控制器的一个操作需要Windows身份验证。此web服务使用web API 2.1实现,并托管在IIS(v7.5及更高版本)中。尽管这是一个intranet web服务,但我不想在不需要的控制器和操作上启用windows身份验证。请告诉我是否有方法为特定控制器和操作启用windows身份认证。
我的web服务代码与下面的代码类似。只有controller1实现的端点api/controller1/action1。action1需要windows身份验证。其余操作不需要Windows身份验证:
[RoutePrefix("api/controller1")]
public class Controller1: ApiController
{
[Route("action1")]
public HttpResponseMessage Action1()
{
return Request.CreateResponse<object>(HttpStatusCode.OK, null);
}
[Route("action2")]
public HttpResponseMessage Action2()
{
return Request.CreateResponse<object>(HttpStatusCode.OK, null);
}
}
[RoutePrefix("api/controller2")]
public class Controller2 : ApiController
{
[Route("action1")]
public HttpResponseMessage Action1()
{
return Request.CreateResponse<object>(HttpStatusCode.OK, null);
}
[Route("action2")]
public HttpResponseMessage Action2()
{
return Request.CreateResponse<object>(HttpStatusCode.OK, null);
}
}
谢谢,Rita
这是您想要的吗?将其添加到配置文件中。
<location path="api/controller1">
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</location>
我也遇到了同样的问题。解决方案是
-
在承载API的IIS网站中启用Windows身份验证。如果您正在使用OWIN自托管,请参阅此SO讨论
-
然后,在需要Windows身份验证的控制器或控制器操作中,只需添加"Authorize"属性。
[授权]公共异步任务GetDocumentContent([FromUri]DocumentContentRequest请求){
}
就是这样。