Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我可以绕过MVC应用程序中WebAPI控制器的组织身份验证吗?_C#_Asp.net Mvc_Authentication_Azure_Asp.net Web Api - Fatal编程技术网

C# 我可以绕过MVC应用程序中WebAPI控制器的组织身份验证吗?

C# 我可以绕过MVC应用程序中WebAPI控制器的组织身份验证吗?,c#,asp.net-mvc,authentication,azure,asp.net-web-api,C#,Asp.net Mvc,Authentication,Azure,Asp.net Web Api,我有一个MVC5、EF6应用程序,它使用组织身份验证(Azure AD),除了一件事之外,其他一切都正常工作。WebAPI控制器需要处理来自未经验证客户端的请求。客户端通常是发出AJAX请求的Android设备 在我将组织身份验证添加到MVC应用程序之前,我的WebAPI控制器被正确调用和运行,因此我知道我的路由是正确的。现在我添加了组织身份验证,不再调用我的WebAPI控制器,客户端的AJAX请求超时 我知道有[Authorize]等属性可以指定对控制器/方法的访问权限,但在使用组织身份验证时

我有一个MVC5、EF6应用程序,它使用组织身份验证(Azure AD),除了一件事之外,其他一切都正常工作。WebAPI控制器需要处理来自未经验证客户端的请求。客户端通常是发出AJAX请求的Android设备

在我将组织身份验证添加到MVC应用程序之前,我的WebAPI控制器被正确调用和运行,因此我知道我的路由是正确的。现在我添加了组织身份验证,不再调用我的WebAPI控制器,客户端的AJAX请求超时

我知道有[Authorize]等属性可以指定对控制器/方法的访问权限,但在使用组织身份验证时,似乎不会调用没有[Authorize]属性的WebAPI控制器

我的问题是,我可以将我的WebAPI控制器标记为允许来自未经身份验证的客户端的请求吗?如果可以,我该怎么做


非常感谢。

如果您想允许匿名访问,可以使用
[AllowAnonymous]
属性

您可以将其添加到ApicController上方,以将整个控制器标记为匿名访问,如:

[AllowAnonymous]
public class MyApiController : ApiController
{
}
或者,您可以将此属性赋予特定方法,以允许匿名调用该方法:

[Authorize]
public class MyApiController : ApiController
{
    [AllowAnonymous]
    public string GetData() 
    {

    }
}

当用户未经授权时,这将阻止对所有方法的访问,但可以匿名调用的
GetData()
方法除外。

如果要允许匿名访问,可以使用
[AllowAnonymous]
属性

您可以将其添加到ApicController上方,以将整个控制器标记为匿名访问,如:

[AllowAnonymous]
public class MyApiController : ApiController
{
}
或者,您可以将此属性赋予特定方法,以允许匿名调用该方法:

[Authorize]
public class MyApiController : ApiController
{
    [AllowAnonymous]
    public string GetData() 
    {

    }
}

当用户未经授权时,这将阻止对所有方法的访问,但可以匿名调用的
GetData()
方法除外。

答案是通过在根Web.config文件中输入下面的xml,允许匿名连接到特定控制器

如果控制器名为“PersonController”,则应在路径属性中输入的名称为“person”,而不是“PersonController”

在我的例子中,因为我希望允许对WebAPI控制器的匿名请求,所以我需要在path属性中的控制器名称前面加上“api/”

希望这能帮助其他可能遇到同样问题的人

<location path="api/my-controller-name">
  <system.web>
    <authorization>
      <allow users="?" />
    </authorization>
  </system.web>
</location>

答案是通过在根Web.config文件中输入下面的xml,允许匿名连接到特定控制器

如果控制器名为“PersonController”,则应在路径属性中输入的名称为“person”,而不是“PersonController”

在我的例子中,因为我希望允许对WebAPI控制器的匿名请求,所以我需要在path属性中的控制器名称前面加上“api/”

希望这能帮助其他可能遇到同样问题的人

<location path="api/my-controller-name">
  <system.web>
    <authorization>
      <allow users="?" />
    </authorization>
  </system.web>
</location>


谢谢,我尝试过这个方法,但在组织身份验证环境中不起作用。我认为问题发生在属性生效之前,因为如果我将WebAPI方法的URL粘贴到浏览器地址栏中,我会被重定向到Microsoft登录页面。谢谢,我尝试了此操作,但在组织身份验证上下文中无法工作。我认为问题发生在属性生效之前,因为如果我将WebAPI方法的URL粘贴到浏览器地址栏中,我会被重定向到Microsoft登录页面。您是否有任何授权处理程序负责web api应用程序中的授权?不,我没有。我找到了解决方案,它列在下面,但我还不能将其标记为正式答案,需要再等23个小时!解决方案是在web.config文件中添加一个位置条目。有关详细信息,请参阅答案。您是否有负责web api应用程序中授权的委托处理程序?没有。我找到了解决方案,它列在下面,但我还不能将其标记为正式答案,需要再等23个小时!解决方案是在web.config文件中添加一个位置条目。请参阅答案了解详细信息。我补充说,路由应包括api文件夹,控制器名称应放置在没有完整文件路径的位置。重塑者会建议你们更多…我补充说,路线应该涵盖api文件夹和控制器名称应该放在没有完整的文件路径。重塑者会建议你更多。。。