我从另一个项目中调用API控制器时遇到问题。
这些是我现在拥有的:
一个包含9个项目的解决方案
1个是Web项目,该项目依赖于同一解决方案中的另外4个项目
9个项目中的1个是控制台应用程序,也依赖于其他4个项目
控制台应用程序和Web项目彼此之间没有依赖关系。它们将独立运行
控制台应用程序需要向Web项目发出Https发布请求,以便可以在Web项目中触发某些事件
两者均独立部署,并且始终在同一服务器上运行
在控制台应用程序中,我有以下代码:
static readonly HttpClient httpClient = new HttpClient();
var response = await httpClient.PostAsync("http://localhost:57110/Api/WebProjectApi/WebProjectController1", null);
在网络上,我有这个控制器:
[System.Web.Http.HttpPost]
public async Task<IHttpActionResult> WebProjectController1()
{
//blah blah
}
问题:
即使我没有身份验证设置,响应始终为401 - Unauthorised
。
我什至怀疑我能否正确测试它,因为这两个项目之间没有相互依赖关系,所以当我从Visual Studio启动控制台应用程序时,Web应用程序无法在本地运行。我可以在本地进行测试吗?
编辑
完整的错误消息如下:
StatusCode: 401, ReasonPhrase: 'Unauthorized', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
X-SourceFiles: =?UTF-8?B?QzpcQ29kZVxJZ25pdGVcYnJhbmNNccHJveHlWb3Rpbmdcc3JjXERvdE5ldFxHSUWduaXRlLldlYlxBcGlcUHJveHlWb3bmdBcGlcQXBwcm92ZZGlmaWNhdGlvbg==?=
Cache-Control: private
Server: Microsoft-IIS/10.0
WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
X-Powered-By: ASP.NET
Date: Wed, 25 Jul 2018 03:02:10 GMT
Content-Length: 6208
Content-Type: text/html; charset=utf-8
}
这篇文章似乎和我想要的完全一样,但是没有明确的答案贴在这里:(
Call asp mvc Controller Action from another application in .net?
编辑2
出于安全考虑,最终,我仍然需要在控制器上进行身份验证。在这篇文章中,我没有提到那部分,因为我认为这是另一个主题(例如,如何模拟为控制台应用程序在运行时定义的某个人)。因此,在这里我只想问一下如何首先集成不身份验证。
答案 0 :(得分:1)
尝试在控制器上的操作方法之前添加[AllowAnonymous]
属性,以仅针对该端点关闭身份验证。
如果您要关闭整个应用程序的身份验证,也可以尝试将<authentication mode="None" />
添加到web.config中。