C#MVC-来自另一个项目的HTTP调用控制器

时间:2018-07-25 02:34:36

标签: c# asp.net-mvc

我从另一个项目中调用API控制器时遇到问题。

这些是我现在拥有的:

  • 一个包含9个项目的解决方案

  • 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

出于安全考虑,最终,我仍然需要在控制器上进行身份验证。在这篇文章中,我没有提到那部分,因为我认为这是另一个主题(例如,如何模拟为控制台应用程序在运行时定义的某个人)。因此,在这里我只想问一下如何首先集成身份验证。

1 个答案:

答案 0 :(得分:1)

尝试在控制器上的操作方法之前添加[AllowAnonymous]属性,以仅针对该端点关闭身份验证。

如果您要关闭整个应用程序的身份验证,也可以尝试将<authentication mode="None" />添加到web.config中。