我看到了一些问题(这里和这里),但他们没有回答我的问题.我试图使用"ajax.ashx"文件调用Ajax,并在函数中访问Session.出于某种原因,Session对象本身的值为null.
使用示例:
Session = HttpContext.Current.Session // This is null
要么:
public virtual void ProcessRequest(HttpContext context)
{
    System.Web.SessionState.HttpSessionState Session = context.Session; 
    // This is null
}
在Web.config中:
<sessionState timeout="1800"></sessionState>
我有GenericHandler和anonymousIdentification的问题.
基本上,如果<anonymousIdentification enabled="true" />在Web配置中打开,每当向服务器发送JQuery GET/POST请求时,该请求将在新用户和新用户会话下执行.
有没有办法缓解这种情况?我需要访问当前用户的会话变量......真的很令人沮丧!
我是一个使用Ninject的新手,我无法弄清楚如何注入我的通用http处理程序.我有一个MVC3项目,我将我的服务注入到控制器中,没有任何问题.这是我在Ninject App_start类中用于注册服务的内容:
        private static void RegisterServices(IKernel kernel)
    {
        kernel.Bind<NLSubscriber.Core.Service.Repository.INLUserRepository>().To<NLSubscriber.Core.Service.Repository.EFDAL.EFNLUserRepository>().InRequestScope();
        kernel.Bind<Neticon.Mvc.Helpers.IConfigHelper>().To<Neticon.Mvc.Helpers.AzureEnabledConfigHelper>().InSingletonScope();
        kernel.Bind<Neticon.Security.Service.IAuthenticationService>().ToMethod(m => Neticon.Security.Service.SecurityServiceFactory.CreateAuthenticationService()).InRequestScope();
        kernel.Bind<Neticon.Security.Service.IMembershipService>().ToMethod(m => Neticon.Security.Service.SecurityServiceFactory.CreateMembershipService()).InRequestScope();
        kernel.Bind<Neticon.Security.Service.IRoleManagerService>().ToMethod(m => Neticon.Security.Service.SecurityServiceFactory.CreateRoleManagerService()).InRequestScope();
当我尝试通过使用属性注入(使用[inject]属性)从我的泛型处理程序获取一些服务时,我总是得到null.这是我的处理程序的样子:
    public class SubscriberHandler : IHttpHandler
{
    [Inject]
    public INLUserRepository userRep { get; set;}
    public void ProcessRequest(HttpContext context)
    {
        var users = userRep.GetUsers(); //userRep is always null here
    }
    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}
我也试过这样做:
    readonly INLUserRepository userRep;
    public SubscriberHandler()
    {
        using (IKernel kernel = new StandardKernel(new App_Start.NJRepositoryModule()))
        {
            userRep = kernel.Get<INLUserRepository>();
        }
    }
但我得到一个例外:"加载Ninject组件ICache时出错.在内核的组件容器中没有注册这样的组件.建议:1)如果你为KernelBase创建了一个自定义子类,请确保你已经正确实现了AddComponents( …
我正在使用带有 C# .Net 的 Stripes 支付网关。我首先创建一个结账,将用户重定向到 Stripe 的支付网关(我不想维护卡号等麻烦,所以这样它会转发到 Stripe 询问卡详细信息、处理付款等)https://stripe .com/docs/ payments/checkout/one-time - 这是在代码隐藏中完成的。
我将成功 URL 设置为 www.example.com/myHandler.ashx(通用处理程序)- 此 URL 将订单 ID 设置为成功。我的处理程序代码类似于https://stripe.com/docs/webhooks/build(因为我使用通用处理程序,所以我使用表单而不是 MVC)
付款成功后,付款会记录到我的数据库中。
考虑到这是一个网络钩子,我如何显示/重定向到感谢页面?
我想将数据从fancytree传递给通用处理程序,以便我可以将其保存以备将来使用.
如果我使用此代码:
function SaveTree() {
    var tree = $('#TopTree').fancytree("getTree");
    $.ajax({
        cache: false,
        url: "SaveTree.ashx",
        data: { 'treeData': tree },
        contentType: "application/json; charset=utf-8"
    });
}
然后我从jquery.js得到以下错误:
JavaScript runtime error: Argument not optional
我也尝试过:
var tree = $('#TopTree').fancytree("getTree").rootNode.children;
这给出了同样的错误.我理解这是因为'tree'不是JSON.如何将数据转换为JSON对象?
编辑:
如果我使用此代码:
function SaveTree() {
    var data = [];
    var tree = $('#TopTree').fancytree("getTree").rootNode.children;
    for (var i = 0; i < tree.length; i++) {
        data.push(tree[i].title)
    }
    data = JSON.parse(JSON.stringify(data))
    $.ajax({
        cache: false,
        url: "SaveTree.ashx",
        data: { 'treeData': data },
        contentType: "application/json; charset=utf-8"
    });
} …在我的小型文件传输网站(这个网站,运行 .NET 4.5.1)中,我按照 Microsoft 知识库文章812406将以前上传的文件从服务器发送到浏览器。
做性能优化我很惊讶地发现那行
var buffer = new byte[10000];
需要相当长的时间(我使用的是 Red Gate 的ANTS Performance Profiler)。每个完整下载/客户端仅分配一次缓冲区。
我的问题:
更新 1:
感谢您的评论,我已经看到内存也在循环内分配。
尽管如此,ANTS Profiler 只会将循环外的分配标记为花费那么多时间,老实说,我(目前)还不明白这一点。我已经删除了循环内的(无意义的)分配。
更新 2:
实施了建议BufferManager并将缓冲区大小从 10k 减少到 4096(以防万一……)后,我的网站几天以来一直运行非常流畅。
我正在尝试使用jQuery AJAX和通用处理程序上传图像文件.但似乎文件没有传递给处理程序.提交后context.Request.Files[0];始终为null: -  /
我究竟做错了什么?
HTML:
<form id="form1" runat="server" method="post" enctype="multipart/form-data">
    <input name="file" id="file" type="file" />
    <input id="save" name="submit" value="Submit" type="submit" />
</form>
JS:
$().ready(function ()
{
    $('#file').change(function () 
    {
        sendFile(this.files[0]);
    });
});
function sendFile(file) 
{
    $.ajax({
        type: 'post',
        url: 'FileUpload.ashx',
        data: file,
        success: function () {
            // do something
        },
        xhrFields:
        {
            onprogress: function (progress) 
            {
                // calculate upload progress
                var percentage = Math.floor((progress.total / progress.totalSize) * 100);
                // log upload progress to console
                console.log('progress', percentage);
                if …我以前见过这个错误,但似乎无法绕过它.在这种情况下,我有一个ASHX页面吐出一个简单的HTML表单,其中包含可以发布XML的文本框.当我尝试阅读表单时,我收到"有潜在危险的Request.Form值......".
由于它是通用处理程序,因此"ValidateRequest"属性不可用.但是我已经在web.config中定义了这个:
<location path="xml/MyGenericHandler.ashx">
    <system.web>
      <pages validateRequest="false" />
    </system.web>
</location>
这个片段早于从.NET 3.5迁移到4.0,所以我猜这是破坏的起源.
知道如何解决ASHX页面的这个错误吗?
我想上传一张描述如下的图片:
data = '{"filename":"' + myfilename + '", "file":"' + file + '", "description":"' +
    description + '"}';
$.ajax({
    type: "POST",
    url: "filehandler.ashx",
    data: data,
    success: function (result) {
        alert(result);
    },
    error: function () {
        alert("There was error uploading file!");
    }
});
我该怎么做?我无法像HttpPostedFile通用处理程序一样读取文件.
context.Request.Form也没有任何钥匙.
是否可以使用通用处理程序 (*.ashx) 返回 html,我可以在 div 标签中使用它?
就像是
<div id="foo"> [call my generic handler which returns some html to be used within this div ] </div>
在这种情况下,它不是图像,而只是 HTML。
谷歌搜索时没有找到任何东西。
我有一个用于 ASP.NET 网站的通用处理程序 (.ashx),它允许我从存储在 SQL Server 数据库中的二进制数据查看图像文件:
public class ImageProvider : IHttpHandler {
            public string connString = "...";
            public void ProcessRequest(HttpContext context)
            {
                context.Response.ContentType = "image/jpeg";
                string sqlSelectQuery = "select img from Subjects Where [Id] = 'XXXX'";
                SqlConnection conn = new SqlConnection(connString);
                conn.Open();
                SqlCommand cmd = new SqlCommand(sqlSelectQuery, conn);
                byte[] img = (byte[])cmd.ExecuteScalar();
                context.Response.BinaryWrite(img);
            }
我目前正在使用简单的 Response.Redirect() 命令将处理程序连接到网站的其余部分:
 Response.Redirect("ImageProvider.ashx");
我的问题是 - 在调用通用处理程序时如何传递任何类型的变量参数(sql 查询中的 XXX)?
非常感谢
也许我正在寻找错误的东西或试图以错误的方式实现这一点.我使用Generic Handler动态生成图像.我目前可以使用以下方式访问我
ImageHandler.ashx?width=x&height=y
我更愿意使用类似的东西访问我的处理程序
images/width/height/imagehandler
这可能是我在谷歌上找到的几个例子与MVC2不兼容.
干杯.
generic-handler ×12
c# ×9
asp.net ×7
jquery ×3
.net ×2
json ×2
session ×2
ajax ×1
ashx ×1
fancytree ×1
ninject ×1
performance ×1
routing ×1
validation ×1
webhooks ×1