小编Sam*_*ham的帖子

当我调用Response.Redirect()时,为什么会在"发送HTTP标头后无法重定向"?

当我调用时,Response.Redirect(someUrl)我得到一个HttpException:"在发送HTTP头之后无法重定向".

为什么我这样做?我该如何解决这个问题?

asp.net response.redirect httpexception http-headers

81
推荐指数
3
解决办法
11万
查看次数

如何使用Json.Net从我的WCF休息服务(.NET 4)返回json,而不是字符串,用引号括起来?

更新2010年10月19日 我知道我刚才问过这个问题,但这些答案中显示的解决方法难以令人满意,对许多人来说,这仍然是一个常见的问题.WCF只是不灵活.我创建了自己的开源C#库,用于在没有WCF的情况下创建REST服务.检查restcake.netrest.codeplex.com以获取有关所述库的信息. 结束更新

更新8/2/2012 ASP.NET Web API(以前是WCF Web API,REST WCF的替代品)默认情况下 使用Json.NET END UPDATE

DataContractJsonSerializer无法处理许多情况下是Json.Net在正确配置(具体周期)处理就好了.

一个服务方法可以返回一个特定的对象类型(在这种情况下是一个DTO),在这种情况下DataContractJsonSerializer将使用它,或者我可以让该方法返回一个字符串,并自己使用Json.Net进行序列化.问题是当我返回一个json字符串而不是一个对象时,发送到客户端的json用引号括起来.

使用DataContractJsonSerializer,返回特定的对象类型,响应是:
{"Message":"Hello World"}

使用Json.Net返回json字符串,响应是:
"{\"Message\":\"Hello World\"}"

我不想在客户端上使用eval()或JSON.parse()结果,如果json以字符串形式返回,用引号括起来就是我必须要做的.我意识到这种行为是正确的; 这不是我想要/需要的.我需要原始的json; 当服务方法的返回类型是对象而不是字符串时的行为.

那么,我如何让我的方法返回一个对象类型,但不能使用DataContractJsonSerializer?我怎么能告诉它使用Json.Net序列化器呢?

或者,有没有直接写入响应流?所以我可以自己退回原始的json?没有包装报价?

这是我的人为例子,供参考:

[DataContract]
public class SimpleMessage
{
    [DataMember]
    public string Message { get; set; }
}

[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class PersonService
{
    // uses DataContractJsonSerializer
    // returns {"Message":"Hello World"}
    [WebGet(UriTemplate = "helloObject")] …
Run Code Online (Sandbox Code Playgroud)

rest wcf serialization json.net

40
推荐指数
2
解决办法
6万
查看次数

为什么c#不能使用内联匿名lambdas或委托?

我希望我能恰当地提出问题的标题.

在c#中,我可以使用lambdas(作为委托),或者使用较旧的委托语法来执行此操作:

Func<string> fnHello = () => "hello";
Console.WriteLine(fnHello());

Func<string> fnHello2 = delegate()
{
    return "hello 2";
};
Console.WriteLine(fnHello2());
Run Code Online (Sandbox Code Playgroud)

那么为什么我不能"内联"lambda或委托体,并避免在命名变量中捕获它(使其匿名)?

// Inline anonymous lambda not allowed
Console.WriteLine(
    (() => "hello inline lambda")()
);

// Inline anonymous delegate not allowed
Console.WriteLine(
    (delegate() { return "hello inline delegate"; })()
);
Run Code Online (Sandbox Code Playgroud)

在javascript中工作的示例(仅用于比较)是:

alert(
    (function(){ return "hello inline anonymous function from javascript"; })()
);
Run Code Online (Sandbox Code Playgroud)

这会产生预期的警报框.

更新:看起来你可以在C#中使用内联匿名lambda,如果你适当地进行转换,但是()的数量开始让它变得难以驾驭.

// Inline anonymous lambda with appropriate cast IS allowed
Console.WriteLine(
    ((Func<string>)(() => "hello inline anonymous …
Run Code Online (Sandbox Code Playgroud)

c# lambda anonymous-methods inline-method

27
推荐指数
3
解决办法
2万
查看次数

ASP.NET Routing可用于为.ashx(IHttpHander)处理程序创建"干净"的URL吗?

我有一些使用普通旧IHttpHandler的REST服务.我想生成更干净的URL,以便我在路径中没有.ashx.有没有办法使用ASP.NET路由创建映射到ashx处理程序的路由?我以前见过这些类型的路线:

// Route to an aspx page
RouteTable.Routes.MapPageRoute("route-name",
    "some/path/{arg}",
    "~/Pages/SomePage.aspx");

// Route for a WCF service
RouteTable.Routes.Add(new ServiceRoute("Services/SomeService",
    new WebServiceHostFactory(),
    typeof(SomeService)));
Run Code Online (Sandbox Code Playgroud)

尝试使用会RouteTable.Routes.MapPageRoute()产生错误(处理程序不会派生出错Page). System.Web.Routing.RouteBase似乎只有2个派生类:ServiceRoute用于服务,DynamicDataRoute用于MVC.我不确定是什么MapPageRoute()(Reflector没有显示方法体,它只显示"在NGen图像边界内嵌这种方法的性能至关重要").

我看到它RouteBase没有密封,并且有一个相对简单的界面:

public abstract RouteData GetRouteData(HttpContextBase httpContext);

public abstract VirtualPathData GetVirtualPath(RequestContext requestContext,
    RouteValueDictionary values);
Run Code Online (Sandbox Code Playgroud)

所以也许我可以制作自己的HttpHandlerRoute.我会给出一个镜头,但如果有人知道现有的或内置的映射路由到IHttpHandlers的方式,这将是伟大的.

asp.net asp.net-routing ihttphandler

26
推荐指数
5
解决办法
1万
查看次数

如何确定ASP.NET站点(IIS)上的用户数?他们的信息?

有没有办法确定ASP.NET应用程序中具有活动会话的用户数?我在特定应用程序中有一个管理员/工具页面,我想显示有关所有打开会话的信息,例如会话数,可能还有请求计算机的地址,或每个用户的其他凭据信息.

asp.net iis session iis-7 iis-6

16
推荐指数
2
解决办法
3万
查看次数

如何执行多个同时的jquery效果?

我正在为页面上的一些错误/验证元素设置动画.我想让它们反弹并突出显示,但如果可能的话,同时也要突出显示.这是我目前正在做的事情:

var els = $(".errorMsg");
els.effect("bounce", {times: 5}, 100);
els.effect("highlight", {color: "#ffb0aa"}, 300);
Run Code Online (Sandbox Code Playgroud)

这导致元素首先反弹,然后突出显示,我希望它们同时发生.我知道.animate()您可以queue:false在选项中指定,但我不想使用动画,因为预先构建的效果"反弹"和"突出显示"正是我想要的.

我试过简单地将这些调用链接起来els.effect().effect(),但这不起作用.我也尝试queue:false输入我传入的选项对象,但这不起作用.

jquery animation effects effect jquery-animate

16
推荐指数
2
解决办法
2万
查看次数

Mercurial扩展无法在Windows 7 x64中运行?

我们正在试驾Mercurial.我们不希望每次与存储库交互时都输入我们的用户/传递,因此我们设置了mercurial_keyring扩展.我们:

  • 安装Python 2.6.5(32或64位,具体取决于系统)
  • 已安装的setuptools(适用于easy_install.exe)
  • easy_install密钥环
  • easy_install mercurial_keyring

然后在该[auth]部分对%userprofile%/ mercurial.ini进行了适当的更改.它在我的同事的计算机(32位xp sp3)上工作正常,但它在我的机器上不起作用(Windows 7 Ultimate x64).另外值得注意的是,必须在Win 7 x64上从源代码构建setuptools(python setup.py bdist_wininst然后运行生成的setuptools-0.6c11.win-amd64.exe).

仅使用Mercurial 1.5二进制安装(.msi)中的hg.exe,运行hg.exe时出现此错误:

***无法导入扩展名mercurial_keyring:没有名为mercurial_keyring的模块

我试图改变我的mercurial.ini,指定mercurial_keyring.py文件的路径,而不是让mercurial找到它(因为它在PYTHONPATH中).

旧:

[extensions]
mercurial_keyring =
Run Code Online (Sandbox Code Playgroud)

新:

[extensions] mercurial_keyring =
c:/mercurial/extensions/mercurial_keyring.py
Run Code Online (Sandbox Code Playgroud)

错误更改为:

abort:无法导入模块密钥环!

因此,在提供mercurial_keyring扩展的路径时,仍然无法找到依赖密钥环模块.

经过进一步调查,似乎NO扩展工作.他们都产生错误:

***无法导入扩展名[扩展名]:没有名为[模块名称]的模块

看来,当运行hg.exe时,它不知道PYTHONPATH.我试过了:

  • Python 2.6.5 32位
  • Python 2.6.5 64位
  • 使用MinGW从源代码构建Mercurial 1.5
  • 使用MSVC9从源代码构建Mercurial 1.5
  • 使用1.5二进制dist(.msi)中的hg.exe
  • 从源代码构建时,在c:\ python26\scripts中使用hg.py
  • %userprofile%/ mercurial.ini中的各种配置
  • 使用setuptools(easy_install.exe)安装密钥环和mercurial_keyring
  • 从源代码构建密钥环和mercurial_keyring(python setup.py bdist_wininst)

什么都行不通.我最接近的是从源代码构建时使用hg.py. 它至少不会给我错误,并且当我输入我的凭据时实际创建%userprofile%/ wincrypto_pass.cfg.但是在后续请求中,它不会自动输入凭据.它再次提示我.

有趣的是,TortoiseHG 正在使用密钥环.我无法让它在命令行上运行.我认为Win 7 x64正在发生一些阻止mercurial(hg.exe)看到PYTHONPATH的事情,因此无法找到任何已安装的模块.

有没有人在Win 7 x64上有扩展功能?具体用二进制安装mercurial(不是hg.py)?

更新 我现在找到了合适的工作.由于TortoiseHG 不会与mercurial_keyring工作,我只是改变了我的PATH设置为包括tortoiseHG文件夹,而不是C:\善变.现在当我在命令行输入"hg"时,它正在使用tortoiseHG文件夹中的hg.exe,它可以正常工作.同样,这仍然是Win 7 x64上的mercurial扩展的问题.答案欢迎.

mercurial tortoisehg windows-7 windows-7-x64

15
推荐指数
1
解决办法
8716
查看次数

不能在c ++类实现文件(.cpp)中的静态方法上使用"static"关键字

考虑:

//在Vector2.h中

class Vector2
{
    public:
        // returns the degrees in radians
        static double calcDir(double x, double y);
}
Run Code Online (Sandbox Code Playgroud)

//在Vector2.cpp中

double Vector2::calcDir(double x, double y)
{
    double rad = ...;
    return rad;
}
Run Code Online (Sandbox Code Playgroud)

为什么Vector2.cpp中的签名不需要关键字static?当我尝试这个时,它会产生一个错误:

static double Vector2::calcDir(double x, double y)
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎不一致.方法签名的所有其他部分都需要在.cpp文件中重复(返回类型,方法名称(duh),args的名称和类型,const-ness).我不喜欢一眼就知道方法是否是静态的(在查看实现时).

有没有理由这不仅不是必需的,而且是禁止的?

c++ static static-methods

11
推荐指数
1
解决办法
1029
查看次数

HyperDescriptor在.NET 4中构建时是否有效?

我正在研究.NET 4项目,并且能够从HyperDescriptor提供的动态属性访问中受益,但是当在.NET 4中构建时,它似乎无法正常工作.我从CodeProject下载了源代码,将解决方案的项目转换为VS2010,并将目标框架更新为4.0.在构建并且示例正确执行时,时序显示使用HyperDescriptor进行动态属性访问是获取/设置对象值的最慢方式.

只有在使用.NET 4从源代码构建HyperDescriptor时才会出现此问题.如果从.NET 4项目中添加对使用.NET 2构建的HyperDescriptor的引用,则可以正常工作.这是目前可接受的解决方案,但是使用.NET 4构建会有一些潜在的优势吗?任何人都想在HyperDescriptor上破解,看看为什么.NET 4版本的速度如此之慢?

.net c# dynamic clr4.0

8
推荐指数
1
解决办法
1493
查看次数