Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 定制信号机&x27;s错误消息_C#_Asp.net_Asp.net Mvc 4_Signalr_Signalr Hub - Fatal编程技术网

C# 定制信号机&x27;s错误消息

C# 定制信号机&x27;s错误消息,c#,asp.net,asp.net-mvc-4,signalr,signalr-hub,C#,Asp.net,Asp.net Mvc 4,Signalr,Signalr Hub,我使用信号机1.0。 当服务器上发生异常时,客户端会收到如下消息 {“I”:“0”,“E”:“抛出了类型为'System.Exception'的异常。”,“T”:“在d:\PATH\TO\HUB.cs中的METHODNAME处:第227行\r\n在d:\PATH\TO\HUB.cs中的METHODNAME处:第51行”} 但我想让它更人性化。我该怎么做? 我读过一个建议,将所有服务器方法放入try-catch块中。但我认为这不是一种真正的方式 我跟踪了该异常,发现在Microsoft.AspNe

我使用信号机1.0。 当服务器上发生异常时,客户端会收到如下消息

{“I”:“0”,“E”:“抛出了类型为'System.Exception'的异常。”,“T”:“在d:\PATH\TO\HUB.cs中的METHODNAME处:第227行\r\n在d:\PATH\TO\HUB.cs中的METHODNAME处:第51行”}

但我想让它更人性化。我该怎么做?
我读过一个建议,将所有服务器方法放入try-catch块中。但我认为这不是一种真正的方式

我跟踪了该异常,发现在Microsoft.AspNet.signal.Hubs.HubDispatcher.Incoming方法中捕获了该异常。但这是我无法自定义的内部静态方法


在理想情况下,我希望能够将异常转换为有效响应。

您可以使用HubPipelineModule

例如:

using System;
using System.Threading.Tasks;
using Microsoft.AspNet.SignalR.Hubs;

public class MyHubPipelineModule : HubPipelineModule
{
    protected override Func<IHubIncomingInvokerContext, Task<object>> BuildIncoming(Func<IHubIncomingInvokerContext, Task<object>> invoke)
    {
        return async context =>
        {
            try
            {
                // This is responsible for invoking every server-side Hub method in your SignalR app.
                return await invoke(context); 
            }
            catch (Exception e)
            {
                // If a Hub method throws, have it return the error message instead.
                return e.Message;
            }
        };
    }
}

您可以使用HubPipelineModule

例如:

using System;
using System.Threading.Tasks;
using Microsoft.AspNet.SignalR.Hubs;

public class MyHubPipelineModule : HubPipelineModule
{
    protected override Func<IHubIncomingInvokerContext, Task<object>> BuildIncoming(Func<IHubIncomingInvokerContext, Task<object>> invoke)
    {
        return async context =>
        {
            try
            {
                // This is responsible for invoking every server-side Hub method in your SignalR app.
                return await invoke(context); 
            }
            catch (Exception e)
            {
                // If a Hub method throws, have it return the error message instead.
                return e.Message;
            }
        };
    }
}

“我读过一个建议,将所有服务器方法放入try-catch块。但我认为这不是一个正确的方法。”-听起来不错。由您决定如何处理异常。我有很多服务器方法。在everywhere中使用try-catch块将添加大量垃圾和潜在的错误位置。我希望在一个地方处理所有错误。“我读过一篇建议,将所有服务器方法放入try-catch块中。但我认为这不是一种正确的方法。”-听起来不错。由您决定如何处理异常。我有很多服务器方法。在everywhere中使用try-catch块将添加大量垃圾和潜在的错误位置。我想在一个地方处理所有错误。