我必须创建一个剃刀文件,它接收多部分文件数据并将其保存到特定位置。
我之前在.ashx
文件中做过这个。喜欢这个
<%@ WebHandler Language="C#" Class="Handler" %>
using System;
using System.Web;
public class Handler : IHttpHandler {
public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "text/plain";
if (context.Request.Files.Count > 0)
{
for (int i = 0; i < context.Request.Files.Count; i++)
{
string fileNamePath = System.IO.Path.GetFileNameWithoutExtension(context.Request.Files[i].FileName) + "_" + System.Guid.NewGuid().ToString("N") + System.IO.Path.GetExtension(context.Request.Files[i].FileName);
string savePath = context.Server.MapPath("~/media/mm-signup-files/") + fileNamePath;
context.Request.Files[i].SaveAs(savePath);
context.Response.Write(fileNamePath + "|" + System.IO.Path.GetFileName(context.Request.Files[i].FileName));
}
}
}
public bool IsReusable {
get {
return false;
}
}
}
但是现在我想在剃刀文件中实现此代码。是否有可能成为剃刀?
我无法理解如何在没有实现HttpContext
接口的剃刀文件中获取IHttpHandler
。或者我错过了什么?
答案 0 :(得分:1)
HttpContext是Razor WebPage的一个属性,因此您可以本机访问Response和Request:
@{
if (Request.Files.Count > 0)
{
for (int i = 0; i < Request.Files.Count; i++)
{
string fileNamePath = Path.GetFileNameWithoutExtension(Request.Files[i].FileName) + "_" + Guid.NewGuid().ToString("N") + Path.GetExtension(Request.Files[i].FileName);
string savePath = Server.MapPath("~/media/mm-signup-files/") + fileNamePath;
Request.Files[i].SaveAs(savePath);
Response.Write(fileNamePath + "|" + Path.GetFileName(Request.Files[i].FileName));
}
}
}
答案 1 :(得分:1)
您可以在控制器的操作中访问请求对象,也可以在View中访问Request对象,它始终可以访问。