如何解决如何阻止用户在浏览器中查看服务器上的某些文件?
我有一个 ASP.Net MVC 应用程序,它在用户请求(通过 http 请求)时动态生成 xml 文件。唯一的问题是它还会将它们写入本地存储的文件中。所以我真的有两个问题:
我有一个身份验证系统来控制某些视图的访问,但我不知道如何在没有视图的情况下执行此操作
当前写入文件和发送响应的方式:
[AcceptVerbs(HttpVerbs.Get)]
public void SendXML()
{
if(!User.Identity.IsAuthenticated)
{
return;
}
string path = Server.MapPath("~/Temp/test.xml");
using (Stream s = File.Open(path,FileMode.OpenorCreate))
{
using (XmlWriter writer = XmlWriter.Create(s,settings))
{
// Write Xml Document
}
}
Response.ContentType = "text/xml";
Response.TransmitFile(path);
}
当前发送请求的方式:
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if(this.readyState == 4 && this.status == 200){
// Good
}
};
xmlhttp.open("GET","http://example.com/MyController/SendXML",true);
xmlhttp.send();
解决方法
是否可以不在本地写入文件但仍然发送 仅将文件响应给客户端
是的。有可能的。一旦将 XML 放入字符串中。您可以将 XML
字符串转换为 byte array
,然后转换为 octet stream
并从 API 发送下来,而不是将该 XML 写入文件并发送。这将为最终用户下载文件,因为您没有将任何内容存储到文件系统
var xml = @"<root></root>";
byte[] xmlBytes = System.Text.Encoding.UTF8.GetBytes(xml);
var stream = new MemoryStream(xmlBytes);
return File(stream,"application/octet-stream","DownloadName.xml");
或者我可以阻止用户输入文件 URL 并在 他们的浏览器,例如example.com/test.xml
这取决于,您可以有多种选择。您可以集成身份验证机制(如 cookie 身份验证或令牌身份验证(如 IdentityServer))以促进受保护的端点。如果您有受保护的端点,则可以将访问权限限制为仅特定用户。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。