ASP.net MVC-检查状态请求

ASP.net MVC-检查状态请求,asp.net,asp.net-mvc,iis,file-upload,httpwebrequest,Asp.net,Asp.net Mvc,Iis,File Upload,Httpwebrequest,只是想知道是否有可能从另一个请求获取请求的状态 为了帮助提供一些上下文,我想使用ajax将一些文件上传到服务器。当上传开始时,我希望触发另一个ajax请求,检查文件的上传量(或者换句话说,另一个请求有多大,服务器收到请求的距离有多远) 我在想,我可以使用guid或类似的东西来确保检查正确请求的状态。但是如何检查另一个请求的状态 干杯 安东尼你可能会想调查,或类似的事情。你可能会想调查,或类似的事情。这绝对是可能的。据我所知,ASP.NET MVC中没有内置的对检查另一个请求状态的支持,但实现起来

只是想知道是否有可能从另一个请求获取请求的状态

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

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

干杯
安东尼

你可能会想调查,或类似的事情。

你可能会想调查,或类似的事情。

这绝对是可能的。据我所知,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;
        }
    }
}
然后使用Ajax,您可以周期性地向返回进度的操作发起HTTPPOST请求,例如

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

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

这绝对是可能的。据我所知,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;
        }
    }
}
然后使用Ajax,您可以周期性地向返回进度的操作发起HTTPPOST请求,例如

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

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

我认为这是不对的,因为上传所花费的时间不是数据到达服务器后的数据处理,而是将数据发送到服务器。据我所知,在使用异步请求逻辑ASP.NET MVC之前,这种情况就发生了。我认为这是不对的,因为上传所花费的时间不是数据到达服务器后的数据处理,而是将数据发送到服务器。据我所知,在使用异步请求逻辑ASP.NET MVC之前,这种情况就会发生。当你说“当你在服务器上读取了上传文件的一大块时,你会调用”时,你是说这会发生在操作中吗???如果是这种情况,据我所知,只有在接收到所有数据时才会调用该操作。因此,SetStatus调用将放在哪里?是的,您完全正确-只有在收到所有数据后才会执行正常操作。也许您可以使用AsyncController来解决这个问题,尽管我还没有尝试过。我自己带着一个定制的IHttpHandler去的。不管是哪种方式,您都需要找到或编写一些代码来分块解析多部分表单数据并设置上载状态,然后还有所有javascript。皮塔!你看到这个问题了吗?当你说“当你在服务器上读取了上传文件的一大块时,你会打电话给”你是说这会在行动中吗???如果是这种情况,据我所知,只有在接收到所有数据时才会调用该操作。因此,SetStatus调用将放在哪里?是的,您完全正确-只有在收到所有数据后才会执行正常操作。也许您可以使用AsyncController来解决这个问题,尽管我还没有尝试过。我自己带着一个定制的IHttpHandler去的。不管是哪种方式,您都需要找到或编写一些代码来分块解析多部分表单数据并设置上载状态,然后还有所有javascript。皮塔!你看到这个问题了吗?