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