如何阻止用户在其浏览器中查看服务器上的某些文件?
How can I block a user from viewing certain files on a server in their browser?
我有一个 ASP.Net MVC 应用程序,它在用户请求(通过 http 请求)时动态生成 xml 文件。唯一的问题是它还会将它们写入本地存储的文件中。所以我真的有两个问题:
是否可以不在本地写入文件,但仍然只将带有文件的响应发送给客户端
或者我可以阻止用户输入文件 URL 并在他们的浏览器上查看它,例如示例。com/test.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();
Is it possible to not write the file locally but still send the
response with the file to the client only
是的。有可能的。一旦你在字符串中有 XML 。无需将 XML 写入文件并发送,您可以将 XML
字符串转换为 byte array
,然后转换为 octet stream
,然后将其从 API.这将为最终用户下载文件,当然您不会将任何内容存储到文件系统
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");
Or can I block a user from typing in the file URL and viewing it on
their browser such as example.com/test.xml
视情况而定,您可以有多种选择。您可以集成身份验证机制,如 cookie 身份验证或令牌身份验证(如 IdentityServer),以促进受保护的端点。如果您有受保护的端点,您可以将访问限制为仅特定用户。
我有一个 ASP.Net MVC 应用程序,它在用户请求(通过 http 请求)时动态生成 xml 文件。唯一的问题是它还会将它们写入本地存储的文件中。所以我真的有两个问题:
是否可以不在本地写入文件,但仍然只将带有文件的响应发送给客户端
或者我可以阻止用户输入文件 URL 并在他们的浏览器上查看它,例如示例。com/test.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();
Is it possible to not write the file locally but still send the response with the file to the client only
是的。有可能的。一旦你在字符串中有 XML 。无需将 XML 写入文件并发送,您可以将 XML
字符串转换为 byte array
,然后转换为 octet stream
,然后将其从 API.这将为最终用户下载文件,当然您不会将任何内容存储到文件系统
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");
Or can I block a user from typing in the file URL and viewing it on their browser such as example.com/test.xml
视情况而定,您可以有多种选择。您可以集成身份验证机制,如 cookie 身份验证或令牌身份验证(如 IdentityServer),以促进受保护的端点。如果您有受保护的端点,您可以将访问限制为仅特定用户。