BackHack FileHandler не найден

Я пытаюсь использовать JQuery File Upload с Backload в качестве обработчика на веб-сайте ASP.NET, но не могу заставить его работать.

Это Default.aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE HTML>
<html>
<head runat="server">
<meta charset="utf-8">
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="js/vendor/jquery.ui.widget.js"></script>
<script src="js/jquery.iframe-transport.js"></script>
<script src="js/jquery.fileupload.js"></script>
<script src="js/uploader.js"></script>
</head>
<body>
<input id="fileupload" type="file">
</body> 
</html>

И JS, чтобы включить плагин загрузки файлов:

$(document).ready(function () {
    var handlerUrl = "/Backload/FileHandler";

    $('#fileupload').fileupload({
        url: handlerUrl
    });
});

Я установил Backload с помощью NuGet и загрузил jQuery File Upload в свой проект. Все ссылки загружаются нормально (без ошибок в консоли). Когда я пытаюсь загрузить файл, я получаю сообщение об ошибке:Failed to load resource: the server responded with a status of 404 (Not Found)и указанный ресурс http://localhost:61076/Backload/FileHandler,

Что мне здесь не хватает?

ПРИМЕЧАНИЕ: я не написал ни одного из этого кода. Все это примеры копирования \ вставки из соответствующих источников, так как я пытаюсь получить базовую работу, прежде чем создавать собственный веб-сайт.

2 ответа

Только что увидел, что у вас есть проект ASP.NET WebForms. Backload по умолчанию использует MVC. Существует два способа запуска Backload в классических проектах WebForms:

  • Добавьте пакеты MVC NuGet в проект и добавьте маршрут в RegisterRoutes()
  • Или добавьте и зарегистрируйте (Web.Config) HttpHandler. Здесь вы можете удалить контроллер в "~/Backload/Controller", чтобы избежать зависимостей MVC.

Самый простой способ - добавить пакет MVC NuGet и настроить маршрут в "~/App_Start/RouteConfig.cs":

    public static void RegisterRoutes(RouteCollection routes)
    {
        var settings = new FriendlyUrlSettings();
        settings.AutoRedirectMode = RedirectMode.Permanent;
        routes.EnableFriendlyUrls(settings);

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


Второе решение (добавить HttpHandler) показано здесь: https://github.com/blackcity/Backload/tree/master/Examples/Backload.Standard.2.0.Full/Backload.Demo/Other/Handler

Пример:

public class FileHandler : HttpTaskAsyncHandler
{
    /// <summary>
    /// File handler demo for classic Asp.Net or HTML. 
    /// To access it in an Javascript ajax request use: <code>var url = "/Handler/FileHandler.ashx";</code>.
    /// </summary>
    /// <remarks>
    /// NOTE. Edit the web.config file to allow the DELETE method in the system.webServer.handlers section
    /// </remarks>
    public override async Task ProcessRequestAsync(HttpContext context)
    {
        try
        {
            // Wrap the request into a HttpRequestBase type
            HttpRequestBase request = new HttpRequestWrapper(context.Request);


            // Create and initialize the handler
            IFileHandler handler = Backload.FileHandler.Create();
            handler.Init(request);


            // Call the execution pipeline and get the result
            IBackloadResult result = await handler.Execute();


            // Write result to the response and flush
            ResultCreator.Write(context.Response, result);
            context.Response.Flush();

        }
        catch
        {
            context.Response.StatusCode = 500;
        }

    }
}

Я думаю, что вы пропустите "r" в имени действия FileHandler http://localhost:61076/Backload/FileHandler

Другие вопросы по тегам