c# - 如何从控制台应用程序在 ASP.NET MVC 应用程序中进行身份验证

标签 c# asp.net-mvc-3 authentication webclient networkcredentials

我有一个控制台应用程序,它向 MVC 应用程序发送一个 XML 并接收另一个 XML 作为响应。它工作得很好,但我想添加授权(出于显而易见的原因)。

这是来自控制台应用程序的代码:

using (var wc = new WebClient())
{
    return GetXmlFromBytes(
        wc.UploadData("URL", GetBytesFromXml(xmlToSend))
    );
}

这是来自 MVC 应用程序的代码:

public ActionResult DoSomething()
{
    XElement xml = XElement.Load(new System.IO.StreamReader(Request.InputStream));
    var response = InsertDataFromXml(xml);
    return File(GenerateFileFromResponse, "text/xml", "result.xml");
}

而且它有效。因此,为了实现授权,我添加了以下代码:

控制台(添加了 wc.Credentials):

using (var wc = new WebClient())
{
    wc.Credentials = new NetworkCredential("user", "password");
    return GetXmlFromBytes(
        wc.UploadData("URL", GetBytesFromXml(xmlToSend))
    );
}

MVC 应用程序(添加了 [Authorize]):

[Authorize]
public ActionResult DoSomething()
{
    XElement xml = XElement.Load(new System.IO.StreamReader(Request.InputStream));
    var response = InsertDataFromXml(xml);
    return File(GenerateFileFromResponse, "text/xml", "result.xml");
}

而且它不起作用。我不知道是否需要这些信息来解决这个问题,但我的 web.config 有以下项目:

<authentication mode="Forms">
  <forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication> 

实际上,MVC 应用程序发回的文件是登录页面的 HTML!

我该怎么做才能解决这个问题? NetworkCredentials 中是否缺少任何参数?我知道它可以用 domain 实例化,但我不知道 MVC 应用程序中用户的域是什么。

而且,只是为了确保:我保证“用户”和“密码”是有效的。

最佳答案

您正在混合凭证类型;

wc.Credentials = new NetworkCredential("user", "password");

用于 HTTP 身份验证。

<authentication mode="Forms">
  <forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication> 

是表单验证。

这些完全不同,并且不兼容。从命令行应用程序使用表单例份验证具有挑战性,您需要使用请求转到登录页面,POST 用户名和密码,然后获取返回的身份验证 cookie 并将其附加到后续请求。

关于c# - 如何从控制台应用程序在 ASP.NET MVC 应用程序中进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10036330/

相关文章:

c# - 如何在 asp.net 中将 Page_load 重命名为 PageName_load

c# - 将 Textblock 文本绑定(bind)到 2 个不同的属性

css - 如何在 MVC View 中将文本包装在 DisplayFor 中?

authentication - Google Chrome 16 与 ASP.NET 表单例份验证 cookie 相关的问题

authentication - Flutter 中的 minLength 文本字段属性

c# - C#广播ARP包的方法

c# - 如何从 JSON 字符串自动生成 C# 类文件

facebook - 身份验证后xmpp登录失败

razor - 将 MVC 2.0 迁移到 MVC 3.0 RC 后使用 Razor 时出现问题

linq - 有趣 (?) 在扩展方法中使用 Linq 表达式