Я бы предложил HttpHandler
.Отсутствие жизненного цикла страницы (поэтому он работает очень быстро) и более четкое разделение кода, а также возможность многократного использования.
Добавьте новый элемент в свой проект типа «Универсальный обработчик».Это создаст новый файл .ashx.Основным методом любого класса, который реализует IHttpHandler
, является ProcessRequest
.Итак, чтобы использовать код из исходного вопроса:
public void ProcessRequest (HttpContext context) {
if(String.IsNullOrEmpty(context.Request["day"]))
{
context.Response.End();
}
string json = "";
byte[] bytes = getByteArray();
json = JsonConvert.SerializeObject(bytes);
context.Response.ContentType = "text/json";
context.Response.Write(json);
}
Измените URL в вашем вызове AJAX, и это должно сделать это.JavaScript будет выглядеть следующим образом, где GetFileHandler.ashx - это имя только что созданного вами IHttpHandler:
$.ajax(
{
type: "POST",
async: true,
url: 'Handlers/GetFileHandler.ashx',
data: "Day=" + $.toJSON(day),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
console.log("SUCCESS:" + msg);
},
error: function (msg) {
console.log("error:" + msg);
}
});
Еще одна небольшая точка, которую нужно учитывать, если вам нужен доступ к объекту Sessionиз самого кода обработчика убедитесь, что он наследуется от интерфейса IRequiresSessionState
:
public class GetFileHandler : IHttpHandler, IRequiresSessionState