ASP.net MVC - 检查状态请求

时间:2010-04-04 03:20:37

标签: asp.net asp.net-mvc iis file-upload httpwebrequest

只是想知道是否可以从另一个请求中获取请求的状态?

为了帮助提供一些上下文,我想使用ajax将一些文件上传到服务器。当上传开始时,我想触发另一个ajax请求,该请求检查文件的上传量(或者换句话说,另一个请求有多大,接收请求的时间是服务器)。

我在想我可以使用guid或类似的东西来确保我正在检查正确请求的状态。但是我如何检查另一个请求的状态???

干杯 安东尼

2 个答案:

答案 0 :(得分:1)

这绝对有可能。据我所知,在ASP.NET MVC中没有内置支持检查另一个请求的状态,但实现起来并不难。

public static UploadStatusHelper {
    static Dictionary<string, int> uploads = new Dictionary<string, int>();
    static object lockObj = new object();

    public static void SetStatus(string key, int bytesComplete) {
        lock(lockObj) {
            uploads[key] = bytesComplete;
        }
    }

    public static void GetStatus(string key) {
        lock(lockObj) {
            int bytesComplete = 0;
            if(uploads.TryGetValue(key, out bytesComplete) {
                return bytesComplete;
            }
            return 0;
        }
    }
}

当您在服务器上阅读上传文件的一大块时,您可以调用

UploadStatusHelper.SetStatus(theKey, bytesRead);

然后使用Ajax,您可以定期向返回进度的操作发起HTTP POST请求,例如

[HttpPost]
public ActionResult GetProgress(string key)
    int bytesRead = UploadStatusHelper.GetStatus(key);
    return Json(new { bytesRead = bytesRead });
}

您可能希望扩展此帮助程序以存储文件的总长度并返回完成百分比,但这只是为了向您展示如何完成它。

答案 1 :(得分:0)

您可能希望查看implementing Asynchronous requests in ASP.NET MVC或类似内容。