Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.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# 对象引用未设置为对象请求的实例。浏览器设置为null NullReferenceException_C#_Asp.net_Asp.net Mvc 4_Asynchronous - Fatal编程技术网

C# 对象引用未设置为对象请求的实例。浏览器设置为null NullReferenceException

C# 对象引用未设置为对象请求的实例。浏览器设置为null NullReferenceException,c#,asp.net,asp.net-mvc-4,asynchronous,C#,Asp.net,Asp.net Mvc 4,Asynchronous,有人能告诉我们这段代码有什么问题吗(下面的代码发生在同一个名为EntityNameBusinessLayer的类中,我们使用的是C#ASP.NET MVC 5): 公共类请求 { 私有HttpRequest请求 public Request(HttpRequest request) { if(request.Browser == null) { } else { } } }

有人能告诉我们这段代码有什么问题吗(下面的代码发生在同一个名为EntityNameBusinessLayer的类中,我们使用的是C#ASP.NET MVC 5):

公共类请求 { 私有HttpRequest请求

    public Request(HttpRequest request)
    {
        if(request.Browser == null)
        {

        }
        else
        {

        }
    }
}

public HttpBrowserCapabilities Browser { get; set; }

public  class ShogunTypeBusinessLayer
{

public string RetrieveUserBrowserDetails()
{               
    string browserSignature;
    HttpBrowserCapabilities browserCapabilities = Request.Browser;
    string typeBrowser = "Type : " + browserCapabilities.Type + " ";
    string nameBrowser = "Name = " + browserCapabilities.Browser + " ";
    string versionBrowser = "Version = " + browserCapabilities.Version + " ";
    string majorVersionBrowser = "Major Version = " + browserCapabilities.MajorVersion + " ";
    string minorVersionBrowser = "Minor Version = " + browserCapabilities.MinorVersion + " ";
    string browserCapabilitiesBrowser = "Platform = " + browserCapabilities.Platform + " ";
    string betaBrowser = "Is Beta = " + browserCapabilities.Beta + " ";
    string isCrawlerBrowser = "Is Crawler = " + browserCapabilities.Crawler +  " ";
    string isAOLBrowser = "Is AOL = " + browserCapabilities.AOL +  " ";
    string isWin16Browser = "Is Win16 = " + browserCapabilities.Win16 +  " ";
    string isWin32Browser = "Is Win32 = " + browserCapabilities.Win32 +  " ";
    string supportFramesBrowserStatus ="Supports Frames = " + browserCapabilities.Frames + " ";
    string supportTableBrowserStatus = "Supports Tables = " + browserCapabilities.Tables + " ";
    string supportCookiesBrowserStatus = "Supports Cookies = " + browserCapabilities.Cookies + " ";
    string supportVBScriptBrowserStatus = "Supports VB Script = " + browserCapabilities.VBScript + " ";
    string supportJavaScriptBrowserStatus = "Supports JavaScript = " + browserCapabilities.JavaScript + " ";
    string supportJavaAppletsBrowserStatus = "Supports Java Applets = " + browserCapabilities.JavaApplets + " ";
    string supportActiveXControlsBrowserStatus ="Supports ActiveX Controls = " + browserCapabilities.ActiveXControls + " ";
    string supportChannelDefinitionFormatBrowserStatus = "CDF = " + browserCapabilities.CDF + " ";

    browserSignature = typeBrowser + 
                       nameBrowser + 
                       versionBrowser + 
                       majorVersionBrowser + 
                       minorVersionBrowser + 
                       browserCapabilitiesBrowser + 
                       betaBrowser +
                       isCrawlerBrowser +
                       isAOLBrowser + 
                       isWin16Browser + 
                       isWin32Browser + 
                       supportFramesBrowserStatus + 
                       supportTableBrowserStatus +  
                       supportCookiesBrowserStatus + 
                       supportVBScriptBrowserStatus + 
                       supportJavaScriptBrowserStatus +  
                       supportJavaAppletsBrowserStatus + 
                       supportActiveXControlsBrowserStatus + 
                       supportChannelDefinitionFormatBrowserStatus;

    return browserSignature;
}
执行后,我们得到以下异常。我们正在尝试将附加的字符串保存到数据库中,以便能够确定浏览器执行了插入操作

描述标题:对象引用未设置为对象的实例

描述:在执行当前web请求期间发生未经处理的异常。请查看堆栈跟踪,以了解有关错误及其在代码中起源的详细信息

异常详细信息:System.NullReferenceException:对象引用未设置为对象的实例

源错误:

第791行:字符串浏览器签名; 第792行: 第793行:HttpBrowserCapabilities browserCapabilities=Request.Browser; 第794行: 第795行:字符串typeBrowser=“Type:+browserCapabilities.Type+”

源文件:

c:\Users\25025\Documents\Visual Studio 2012\Projects\censys_cross\censys\BusinessLayer\ShogunTypeBusinessLayer.cs    Line:  793 
堆栈跟踪:

[NullReferenceException: Object reference not set to an instance of an object.]
   censys.BusinessLayer.ShogunTypeBusinessLayer.RetrieveUserBrowserDetails() in c:\Users\25025\Documents\Visual Studio 2012\Projects\censys_cross\censys\BusinessLayer\ShogunTypeBusinessLayer.cs:793
   censys.BusinessLayer.ShogunTypeBusinessLayer.AddShogunType(SHOGUN_TYPEda shogunType) in c:\Users\25025\Documents\Visual Studio 2012\Projects\censys_cross\censys\BusinessLayer\ShogunTypeBusinessLayer.cs:1124
   censys.Controllers.ShogunTypeController.Create_Post() in c:\Users\25025\Documents\Visual Studio 2012\Projects\censys_cross\censys\Controllers\ShogunTypeController.cs:33
   lambda_method(Closure , ControllerBase , Object[] ) +101
   System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +14
   System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +208
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +27
   System.Web.Mvc.Async.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41() +28
   System.Web.Mvc.Async.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) +10
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +57
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +48
   System.Web.Mvc.Async.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33() +57
   System.Web.Mvc.Async.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49() +223
   System.Web.Mvc.Async.<>c__DisplayClass37.<BeginInvokeActionMethodWithFilters>b__36(IAsyncResult asyncResult) +10
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +57
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +48
   System.Web.Mvc.Async.<>c__DisplayClass2a.<BeginInvokeAction>b__20() +24
   System.Web.Mvc.Async.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult) +102
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +57
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +43
   System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult) +14
   System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +23
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62
   System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +57
   System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +23
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62
   System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +47
   System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +10
   System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult) +25
   System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +23
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62
   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +47
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9651532
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155
[NullReferenceException:对象引用未设置为对象的实例。]
c:\Users\25025\Documents\Visual Studio 2012\Projects\censys\u cross\censys\BusinessLayer\ShogunTypeBusinessLayer.RetrieveUserBrowserDetails()中的censys.BusinessLayer.ShogunTypeBusinessLayer.RetrieveUserBrowserDetails()
c:\Users\25025\Documents\visualstudio 2012\Projects\censys\u cross\censys\BusinessLayer\ShogunTypeBusinessLayer.AddShogunType(SHOGUN\u TYPEda shogunType)中的censys.BusinessLayer.AddShogunType(SHOGUN\u TYPEda shogunType)cs:1124
在c:\Users\25025\Documents\Visual Studio 2012\Projects\censys\u cross\censys\Controllers\ShogunTypeController.Create_Post()中创建
lambda_方法(闭包、控制器库、对象[])+101
System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase控制器,对象[]参数)+14
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext ControllerContext,IDictionary`2参数)+208
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext ControllerContext,ActionDescriptor ActionDescriptor,IDictionary`2参数)+27
System.Web.Mvc.Async.c__显示类42.b__41()+28
System.Web.Mvc.Async.c_uuuudisplayClass8`1.b_uuuu7(IAsyncResult)+10
System.Web.Mvc.Async.WrappedAsyncResult`1.End()+57
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)+48
System.Web.Mvc.Async.c__显示类39.b__33()+57
System.Web.Mvc.Async.c__DisplayClass4f.b__49()+223
System.Web.Mvc.Async.c__显示类37.b__36(IAsyncResult asyncResult)+10
System.Web.Mvc.Async.WrappedAsyncResult`1.End()+57
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult)+48
System.Web.Mvc.Async.c__DisplayClass2a.b__20()+24
System.Web.Mvc.Async.c__显示类25.b__22(IAsyncResult asyncResult)+102
System.Web.Mvc.Async.WrappedAsyncResult`1.End()+57
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult)+43
System.Web.Mvc.c__;u displayClassId.b__u18(IAsyncResult asyncResult)+14
System.Web.Mvc.Async.c__显示类4.b__3(IAsyncResult ar)+23
System.Web.Mvc.Async.WrappedAsyncResult`1.End()+62
System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult)+57
System.Web.Mvc.Async.c__显示类4.b__3(IAsyncResult ar)+23
System.Web.Mvc.Async.WrappedAsyncResult`1.End()+62
System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult)+47
System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult)+10
System.Web.Mvc.c__;u DisplayClass8.b__;u 3(IAsyncResult asyncResult)+25
System.Web.Mvc.Async.c__显示类4.b__3(IAsyncResult ar)+23
System.Web.Mvc.Async.WrappedAsyncResult`1.End()+62
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)+47
System.Web.Mvc.MvcHandler.System.Web.IHTTPassynchandler.EndProcessRequest(IAsyncResult结果)+9
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()+9651532
System.Web.HttpApplication.ExecuteStep(IExecutionStep步骤,布尔值&同步完成)+155

由于某种原因,代码没有执行。

此代码将不会编译为c#将不允许您拥有未在类/类型中定义的方法和属性。实际上,您需要有一个类,该类应该有一个构造函数,该构造函数应该将一个
请求
实例作为参数,并执行一个空值lue检入构造函数。然后将请求属性设置为私有字段。这将确保:

  • 调用方在运行时不会得到一些难以跟踪的NRE
  • 代码很早就失败了
  • 该类型的要求很明确,因为您无法创建状态不好的有效实例(请求的值为null)
  • 或者,您可以让该方法接收一个请求实例,并让它检查参数是否为null

    public class EntityNameBusinessLayer
    {
        // private member, i left the naming the same but the usual convention for private members is camelcase and not pascal.
        private HttpRequest Request;
    
        // constructor
        public EntityNameBusinessLayer(HttpRequest request) {
            // check for null
            if(request == null)
                throw new ArgumentNullException("request");
            Request = request; // now the state of the instance is valid and it can be used by the caller
        }
    
        public string RetrieveUserBrowserDetails()
        { /*your code*/ }
    }
    
    在asp.net web窗体中调用代码

    public class YourAspWebPage : System.Web.UI.Page {
        protected void Button_Click(object sender, EventArgs args) {
            var bl = new EntityNameBusinessLayer(this.Request);
            var result = bl.RetrieveUserBrowserDetails();
        }
    }
    
    在Asp.net Mvc控制器中调用代码。请注意,当您在Mvc中工作时,不鼓励直接使用类型
    HttpRequest
    。相反,使用类型
    HttpRequestBase
    ,因为在单元测试中很容易模拟/伪造。另请参见CountZero的第二个答案(得票最多的一个)


    Request
    在这个类中是如何设置的?似乎是null/never set.@stephen.vakil这是类public HttpRequest Request{get;set;}顶部的代码行代码中似乎没有任何内容初始化
    请求的值
    ——它正在声明但从未设置。此应用程序是否使用基于属性的依赖项注入和per
    public class YourAspWebPage : System.Web.UI.Page {
        protected void Button_Click(object sender, EventArgs args) {
            var bl = new EntityNameBusinessLayer(this.Request);
            var result = bl.RetrieveUserBrowserDetails();
        }
    }
    
    public class YourController : System.Web.Mvc.Controller {
        public void SomeAction() {
            var bl = new EntityNameBusinessLayer(System.Web.HttpContext.Current.Request);
            var result = bl.RetrieveUserBrowserDetails();
        }
    }