从自定义 IHttpHandler 重定向到控制器操作

Redirect to controller action from custom IHttpHandler

我有一个应用程序,用户需要在其中上传大文件(几千兆字节)。

为此,我实施了一个自定义 IHttpHandler,它似乎运行良好。但是,一旦自定义 IHttpHandler.ProcessRequest() 完成文件上传,我想将用户重定向到控制器操作。此外,我需要以包含所有原始请求参数的方式进行重定向。

这是我的尝试:

    public void ProcessRequest(HttpContext context)
    {
        var isUploadReuqest = context.Request.Files.Count > 0;

        if (isUploadReuqest)
        {
            // snip

            context.Response.RedirectToRoute("Default", new { controller = "Home", action = "Upload" });
        }
    }

但是,我的尝试产生了以下错误:

Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. Please review the following URL and make sure that it is spelled correctly.

Requested URL: /Home/Upload

这是我的路由配置:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.IgnoreRoute("{controller}/FileUpload");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}

请注意,我的自定义 HTTP 处理程序位于路径 */FileUpload。是的,如果您想知道 HomeController 中是否有名为 Upload 的操作,则有 :)

提前感谢您的任何回复!

重定向中似乎缺少您的虚拟目录名称 url。你可以试试下面的代码

context.Response.Redirect("Home/Upload");

context.Response.Redirect(Url.RouteUrl(new{ controller="Home", action="Upload"}));

这里'Url'就是类似MVC的UrlHelper

经过进一步研究,我意识到我正在尝试重定向到 HttpPost 操作。显然这是不可能的,因为设计重定向是 GET 请求。我需要换个思路来解决我的问题。