我看到了一些问题(这里和这里),但他们没有回答我的问题.我试图使用"ajax.ashx"文件调用Ajax,并在函数中访问Session.出于某种原因,Session对象本身的值为null.
使用示例:
Session = HttpContext.Current.Session // This is null
Run Code Online (Sandbox Code Playgroud)
要么:
public virtual void ProcessRequest(HttpContext context)
{
System.Web.SessionState.HttpSessionState Session = context.Session;
// This is null
}
Run Code Online (Sandbox Code Playgroud)
在Web.config中:
<sessionState timeout="1800"></sessionState>
Run Code Online (Sandbox Code Playgroud) 我有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();
Run Code Online (Sandbox Code Playgroud)
当我尝试通过使用属性注入(使用[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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我也试过这样做:
readonly INLUserRepository userRep;
public SubscriberHandler()
{
using (IKernel kernel = new StandardKernel(new App_Start.NJRepositoryModule()))
{
userRep = kernel.Get<INLUserRepository>();
}
}
Run Code Online (Sandbox Code Playgroud)
但我得到一个例外:"加载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"
});
}
Run Code Online (Sandbox Code Playgroud)
然后我从jquery.js得到以下错误:
JavaScript runtime error: Argument not optional
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
var tree = $('#TopTree').fancytree("getTree").rootNode.children;
Run Code Online (Sandbox Code Playgroud)
这给出了同样的错误.我理解这是因为'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"
});
} …Run Code Online (Sandbox Code Playgroud) 在我的小型文件传输网站(这个网站,运行 .NET 4.5.1)中,我按照 Microsoft 知识库文章812406将以前上传的文件从服务器发送到浏览器。
做性能优化我很惊讶地发现那行
var buffer = new byte[10000];
Run Code Online (Sandbox Code Playgroud)
需要相当长的时间(我使用的是 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>
Run Code Online (Sandbox Code Playgroud)
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 …Run Code Online (Sandbox Code Playgroud) 我以前见过这个错误,但似乎无法绕过它.在这种情况下,我有一个ASHX页面吐出一个简单的HTML表单,其中包含可以发布XML的文本框.当我尝试阅读表单时,我收到"有潜在危险的Request.Form值......".
由于它是通用处理程序,因此"ValidateRequest"属性不可用.但是我已经在web.config中定义了这个:
<location path="xml/MyGenericHandler.ashx">
<system.web>
<pages validateRequest="false" />
</system.web>
</location>
Run Code Online (Sandbox Code Playgroud)
这个片段早于从.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!");
}
});
Run Code Online (Sandbox Code Playgroud)
我该怎么做?我无法像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>
Run Code Online (Sandbox Code Playgroud)
在这种情况下,它不是图像,而只是 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);
}
Run Code Online (Sandbox Code Playgroud)
我目前正在使用简单的 Response.Redirect() 命令将处理程序连接到网站的其余部分:
Response.Redirect("ImageProvider.ashx");
Run Code Online (Sandbox Code Playgroud)
我的问题是 - 在调用通用处理程序时如何传递任何类型的变量参数(sql 查询中的 XXX)?
非常感谢
也许我正在寻找错误的东西或试图以错误的方式实现这一点.我使用Generic Handler动态生成图像.我目前可以使用以下方式访问我
ImageHandler.ashx?width=x&height=y
Run Code Online (Sandbox Code Playgroud)
我更愿意使用类似的东西访问我的处理程序
images/width/height/imagehandler
Run Code Online (Sandbox Code Playgroud)
这可能是我在谷歌上找到的几个例子与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