我在其他帖子中也看到了此问题,但我相信情况可能有所不同。我的代码在localhost上运行良好,但是在部署到Web服务器时出错。使用Asp.Net Core 2.0和SQL Server2012。我认为这与我的UserType
类(Model.LoggedInUserType
)有关:
public string GetUserType(string LoginID)
{
string user = ClaimsPrincipal.Current.Identity.Name;
Employee employee = db.tblEmployee.FirstOrDefault(e => (e.FirstName + '.' + e.LastName) == user);
string userType = employee.UserType;
return userType;
}
UserTypeViewModel.cs
public string LoggedInUserType = BaseInfoClass.UserType;
错误(来自日志):
2018-09-12 16:06:04.9272 | 2 | INFO | Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker |已执行 行动 ApostilleDNCv2.Controllers.TransactionController.UpdateTransaction (ApostilleDNCv2)在906.2122毫秒2018-09-12 16:06:04.9272 | 3 | INFO | Microsoft.AspNetCore.Session.DistributedSession |会话已启动;密钥:68a158b8-c8bb-9d16-6e66-8c1a3942f3be, id:9c7a85af-15d4-b8c1-1286-c0ca515cb1e2 2018-09-12 16:06:04.9433 ||错误| Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware |一个 发生未处理的异常:对象引用未设置为 对象的实例。 System.NullReferenceException:对象引用 未设置为对象的实例。在 AspNetCore._Views_Shared_Components_Apostille_default_cshtml.d__22.MoveNext() 在 C:\ TFS \ Corporation \ Development \ Src \ ApostilleDNCv2 \ ApostilleDNCv2 \ Views \ Shared \ Components \ Apostille \ default.cshtml:line 42 ---从上一个引发异常的位置开始的堆栈跟踪---
查看(UpdateTransactionPost.cshtml)代码:
<div class="col-lg-offset-2">
@await Component.InvokeAsync("Apostille", new { tid = Model.Trans.TransactionID })
</div>
<div class="col-lg-offset-2">
@await Component.InvokeAsync("Certificate", new { tid = Model.Trans.TransactionID })
</div>
查看组件(Shared \ Components \ Apostille \ default.cshtml-第42行):
<th class="txtctr" style="@(Model.LoggedInUserType.ToString() != "ADM" ? "display:none" : "" )">
@Html.DisplayName("Delete")
</th>
样式引用的目的是使删除(和某些其他功能)仅对管理员可见/可用。
此网页显示400错误。其他不依赖UserType的页面也可以正常显示。
我的问题:为什么这在本地而不是在Web服务器上起作用?我该如何纠正此问题(希望)而不必重写整个身份验证方案?
谢谢。