【发布时间】:2014-07-31 23:26:02
【问题描述】:
我已经使用 Windows 身份验证 在我的本地计算机上创建了一个 WebAPI 应用程序。
我还创建了一个 MVC 5 应用程序,并尝试使用以下代码连接到我的 WebAPI:
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("http://localhost:52613/api/acmeco/");
var result = client.GetAsync("assignees/get").Result;
string resultContent = result.Content.ReadAsStringAsync().Result;
JavaScriptSerializer json_serializer = new JavaScriptSerializer();
assignees = json_serializer.DeserializeObject(resultContent);
}
问题是:每次我尝试通过 MVC 5 应用程序或 Fiddler 进行连接时,都会收到 401 Unauthorized 错误。
我已经尝试了多种解决方案来解决这个问题,包括但不限于以下:
http://support.microsoft.com/kb/896861/en-us
有谁知道我如何从本地 MVC 5 应用调用本地 WebAPI?
编辑:我也尝试像这样将 CORS(跨域脚本)添加到 WebAPI,但似乎对 401 错误没有影响:
[EnableCors(origins: "*", headers: "*", methods: "*")]
public class AssigneesController : ApiController
{
public Assignees AssigneeRepo = new Assignees();
// GET api/values
public IEnumerable<Assignee> Get(string @namespace)
{
return AssigneeRepo.GetAssigneesForTenant(@namespace);
}
}
但是,我可以直接从浏览器访问 localhost:52613/api/acmeco/assignees/get。
【问题讨论】:
-
HTTP 401 表示您未获得授权。 WebApi 上是否有身份验证?
-
@DavidG 是的,它使用 Windows 身份验证。我可以直接从浏览器调用我的 WebAPI,它可以工作。但是,从 Fiddler 或本地 MVC 5 应用程序调用,它给了我一个 401。
-
您是否尝试过传入 Windows 凭据?检查这个 - stackoverflow.com/questions/11608843/error-401-in-c-sharp
-
@user1477388 您的浏览器会选择运行它的 Windows 帐户,但是当您创建 HttpClient 时,您需要手动传递它。如果来自 Gabbar 的链接不起作用,那么还有很多其他网站应该会告诉您如何操作。
-
@Gabbar 感谢 Gabbar。该链接不是确切的答案,我不得不对其进行一些修改,但基本上就是这样。
标签: c# asp.net-web-api asp.net-mvc-5