相关疑难解决方法(0)

OWIN/Katana未处理的异常全局处理程序?

在Katana(OWIN)实现中实现全局异常捕获器处理程序的正确方法是什么?

在作为Azure云服务(工作者角色)运行的自托管OWIN/Katana实现中,我将此代码放在中间件中:

throw new Exception("pooo");
Run Code Online (Sandbox Code Playgroud)

然后我将此代码放在Startup类Configuration方法中,在事件处理程序中设置断点:

 AppDomain.CurrentDomain.UnhandledException += 
    CurrentDomain_UnhandledExceptionEventHandler;
Run Code Online (Sandbox Code Playgroud)

和同一个类中的事件处理程序(在第一行设置断点):

private static void CurrentDomain_UnhandledExceptionEventHandler(object sender, UnhandledExceptionEventArgs e)
{
    var exception = (Exception)e.ExceptionObject;
    Trace.WriteLine(exception.Message);
    Trace.WriteLine(exception.StackTrace);
    Trace.WriteLine(exception.InnerException.Message);
}
Run Code Online (Sandbox Code Playgroud)

代码运行时,不会触发断点.Visual Studio输出窗口确实包括此:

A first chance exception of type 'System.Exception' occurred in redacted.dll
A first chance exception of type 'System.Exception' occurred in mscorlib.dll
Run Code Online (Sandbox Code Playgroud)

我也尝试将连接和处理程序移动到Worker Role OnStart方法,但仍然没有命中断点.

我根本没有使用WebAPI,但确实查看过那里做的帖子,但我没有发现任何明确的内容,所以我在这里.

在.NET Framework 4.5.2,VS 2013上运行.

所有想法都赞赏.谢谢.

c# exception-handling asp.net-web-api owin katana

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

像OwinMiddleware和IOwinContext这样的Microsoft.Owin类型是否与其他Owin服务器不兼容?

如果我使用像OwinMiddleware和IOwinContext这样的Microsoft.Owin类型构建OWIN中间件,我的中间件是否可以与非Microsoft Owin主机/服务器一起使用?我正在研究NancySignalR的中间件类,它们看起来与OwinMiddleware基类非常不同,中间件就像Cookie认证中间件和WebApi一样.我正在阅读规范,但我仍然不清楚非Microsoft Owin服务器是否可以使用OwinMiddleware和IOwinContext类型而不依赖于Microsoft.Owin(我猜这会破坏Owin的目的).

signalr asp.net-web-api owin katana

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

Web API将OAuth令牌作为XML返回

使用具有单个用户帐户的默认Visual Studio 2013 Web API项目模板,并使用application/xml的Accept标头发布到/ token端点,服务器仍然以JSON方式返回响应:

{"access_token":"...","token_type":"bearer","expires_in":1209599}
Run Code Online (Sandbox Code Playgroud)

有没有办法将令牌恢复为XML?

asp.net oauth-2.0 asp.net-web-api

8
推荐指数
2
解决办法
2127
查看次数

请求/响应记录的响应正文

我正在尝试编写一个Owin midleware组件,它将记录每个传入的请求和对数据库的响应.

这是我设法得到多远.

我一直在阅读回复.说:

Stream不支持阅读.

我如何阅读Response.Body?

 public class LoggingMiddleware : OwinMiddleware
 {
        private static Logger log = LogManager.GetLogger("WebApi");

        public LoggingMiddleware(OwinMiddleware next, IAppBuilder app)
            : base(next)
        {
        }

    public override async Task Invoke(IOwinContext context)
    {
        using (var db = new HermesEntities())
        {

            var sw = new Stopwatch();
            sw.Start();

            var logRequest = new log_Request
            {
                Body = new StreamReader(context.Request.Body).ReadToEndAsync().Result,
                Headers = Json.Encode(context.Request.Headers),
                IPTo = context.Request.LocalIpAddress,
                IpFrom = context.Request.RemoteIpAddress,
                Method = context.Request.Method,
                Service = "Api",
                Uri = context.Request.Uri.ToString(),
                UserName = context.Request.User.Identity.Name

            };
            db.log_Request.Add(logRequest); …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-web-api owin

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

如何使用OWIN中间件组件检查MVC响应流?

这个问题之前已经被提出了几个问题,但是我无法得到任何工作的答案,我正在失去我的头发并且不确定问题是否只是解决方案来自2年前并且事情已经发生了变化.

如何在一个自定义的Owin中间件中安全地拦截响应流 - 我基于此我的代码,它看起来应该工作,但它不

OWIN OnSendingHeaders回调 - 读取响应主体 - 似乎是一个不同的OWIN版本,因为方法签名不起作用

我想要做的是编写一个可以检查来自MVC的响应流的OMC.

我所做的(在其他几次尝试中)是添加一个OMC,它将context.Response.Body设置为MemoryStream,因此我可以回放它并检查下游组件写的内容:

    public async Task Invoke(IDictionary<string, object> env)
    {

        IOwinContext context = new OwinContext(env);

        // Buffer the response
        var stream = context.Response.Body;
        var buffer = new MemoryStream();
        context.Response.Body = buffer;
        .......
Run Code Online (Sandbox Code Playgroud)

我发现MemoryStream总是空的,除非我从另一个OMC写入它. 所以看起来下游的OMC正在使用我的MemoryStream,但是MVC响应不是,好像OWIN管道在请求进入MVC之前完成了,但是这不对吗?

完整代码:

public partial class Startup
{
    public void Configuration(IAppBuilder app)
    {
        ConfigureAuth(app);
        app.Use(new ResponseExaminerMiddleware());

        // Specify the stage for the OMC
        //app.UseStageMarker(PipelineStage.Authenticate);
    }


}




public class ResponseExaminerMiddleware
{
    private AppFunc next;

    public void Initialize(AppFunc next)
    {
        this.next …
Run Code Online (Sandbox Code Playgroud)

c# .net-4.5 owin asp.net-mvc-5

6
推荐指数
1
解决办法
2889
查看次数