dotnetcore / Util

Util是一个.Net平台下的应用框架,旨在提升中小团队的开发能力,由工具类、分层架构基类、Ui组件,配套代码生成模板,权限等组成。

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

动态生成组件异常没有正常得到 Context对象

willowlau opened this issue · comments

环境 MacOS 10.13.5
工具 Visual Studio for mac
dotnet_2.1.301_x64

Windows 环境下是正常的。

Util.Logs 项目下 Log.cs 第89行。 var context = GetLogContext(); 动态生成组件异常没有正常得到 Context对象

ActionDescriptor: "Util.Samples.Webs.Controllers.HomeController.Index (Util.Samples.Webs)"
Exception: {AspectCore.DynamicProxy.AspectInvocationException: Exception has been thrown by the aspect of an invocation. ---> Device not configured. ---> System.Net.Internals.SocketExceptionFactory+ExtendedSocketException: Device not configured
at System.Net.Dns.InternalGetHostByName(String hostName)
at System.Net.Dns.GetHostAddresses(String hostNameOrAddress)
at Util.Helpers.Web.GetLanIp() in /Users/willow/Work/Work.Net/Util/src/Util/Helpers/Web.cs:line 135
at Util.Helpers.Web.get_Ip() in /Users/willow/Work/Work.Net/Util/src/Util/Helpers/Web.cs:line 126
at Util.Logs.Core.LogContext.CreateInfo() in /Users/willow/Work/Work.Net/Util/src/Util/Logs/Core/LogContext.cs:line 77
at Util.Logs.Core.LogContext.GetInfo() in /Users/willow/Work/Work.Net/Util/src/Util/Logs/Core/LogContext.cs:line 68
at Util.Logs.Core.LogContext.get_TraceId() in /Users/willow/Work/Work.Net/Util/src/Util/Logs/Core/LogContext.cs:line 34
at invoker_String get_TraceId()(Object , Object[] )
at AspectCore.DynamicProxy.RuntimeAspectContext.Complete()
at AspectCore.DynamicProxy.Parameters.EnableParameterAspectInterceptor.Invoke(AspectContext context, AspectDelegate next)
--- End of inner exception stack trace ---
at AspectCore.DynamicProxy.AspectActivator.Invoke[TResult](AspectActivatorContext activatorContext)
at AspectCore.DynamicGenerated.LogContext.get_TraceId()
at Util.Logs.Core.LogBase1.Init(TContent content) in /Users/willow/Work/Work.Net/Util/src/Util/Logs/Core/LogBase.cs:line 72 at Util.Logs.Log.Init(LogContent content) in /Users/willow/Work/Work.Net/Util/src/Util.Logs/Log.cs:line 50 at Util.Logs.Core.LogBase1.Execute(LogLevel level, TContent& content) in /Users/willow/Work/Work.Net/Util/src/Util/Logs/Core/LogBase.cs:line 111
at Util.Logs.Core.LogBase1.Info() in /Users/willow/Work/Work.Net/Util/src/Util/Logs/Core/LogBase.cs:line 159 at Util.Logs.Core.LogBase1.Info(String message) in /Users/willow/Work/Work.Net/Util/src/Util/Logs/Core/LogBase.cs:line 168
at Util.Samples.Webs.Controllers.HomeController.Index() in /Users/willow/Work/Work.Net/Util/sample/Util.Samples.Webs/Controllers/HomeController.cs:line 14
at lambda_method(Closure , Object , Object[] )
at Microsoft.Extensions.Internal.ObjectMethodExecutor.Execute(Object target, Object[] parameters)
at Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor.SyncActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeActionMethodAsync()
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeNextActionFilterAsync()
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ActionExecutedContext context)
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeInnerFilterAsync()
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextExceptionFilterAsync()}
ExceptionDispatchInfo: {System.Runtime.ExceptionServices.ExceptionDispatchInfo}
ExceptionHandled: false
Filters: {Microsoft.AspNetCore.Mvc.Filters.IFilterMetadata[4]}
HttpContext: {Microsoft.AspNetCore.Http.DefaultHttpContext}
ModelState: {Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary}
Result: (null)
RouteData: {Microsoft.AspNetCore.Routing.RouteData}
Non-Public members:

我没有mac的环境呢,要不你修复一下提交一个issue上来?

这个问题是因为Util.Helpers.Web.GetLanIp()这个方法引发的异常。
我使用这个方法 @gerardo H https://stackoverflow.com/a/28621250/4861127

目前MacOS和Windows下是正常的。

private static string GetLanIp(NetworkInterfaceType _type = NetworkInterfaceType.Ethernet)
{
    try
    {
        foreach (NetworkInterface item in NetworkInterface.GetAllNetworkInterfaces())
        {
            if (item.NetworkInterfaceType == _type && item.OperationalStatus == OperationalStatus.Up)
            {
                IPInterfaceProperties adapterProperties = item.GetIPProperties();
                if (adapterProperties.GatewayAddresses.FirstOrDefault() != null)
                {
                    foreach (UnicastIPAddressInformation ip in adapterProperties.UnicastAddresses)
                    {
                        if (ip.Address.AddressFamily == AddressFamily.InterNetwork)
                        {
                            return ip.Address.ToString();
                        }
                    }
                }
            }
        }

    }
    catch
    {
        return string.Empty;
    }
    return string.Empty;
}