我有一个控制台应用程序,它将 XML 发送到 MVC 应用程序并接收另一个 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应用发回的文件就是LogOn页面的HTML!
我该怎么做才能解决这个问题?
NetworkCredentials
中是否缺少任何参数?我知道它可以用 domain
实例化,但我不知道 MVC 应用程序中用户的域是什么。而且,只是为了确保:我保证“用户”和“密码”是有效的。
最佳答案
您正在混合凭据类型;
wc.Credentials = new NetworkCredential("user", "password");
用于 HTTP 身份验证。
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>
是表单例份验证。
这些是完全不同的,并且不兼容。从命令行应用程序使用表单例份验证具有挑战性,您需要使用请求转到登录页面,发布用户名和密码,然后获取返回的身份验证 cookie 并将其附加到后续请求中。
关于c# - 如何从控制台应用程序在 ASP.NET MVC 应用程序中进行身份验证,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10036330/