Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.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# 操作引发ArgumentNullException_C#_Asp.net Mvc_Urlhelper - Fatal编程技术网

C# 操作引发ArgumentNullException

C# 操作引发ArgumentNullException,c#,asp.net-mvc,urlhelper,C#,Asp.net Mvc,Urlhelper,我正在使用UrlHelper生成URL,但是,当我调用方法Action(Action、controller、route)时,我得到ArgumentNullException 我创建了一个helper函数,它可以为我创建对象路由值(并且工作正常) 最奇怪的是,它已经在一个控制器中工作了,但是,它并没有在单独的类中工作(比如BusinessLayer/Facade) 所有参数都不是null 它是从一个任务方法调用的 我还试图获得如下上下文: UrlHelper urlHelper = new Url

我正在使用UrlHelper生成URL,但是,当我调用方法Action(Action、controller、route)时,我得到ArgumentNullException

我创建了一个helper函数,它可以为我创建对象路由值(并且工作正常)

最奇怪的是,它已经在一个控制器中工作了,但是,它并没有在单独的类中工作(比如BusinessLayer/Facade)

所有参数都不是null

它是从一个任务方法调用的

我还试图获得如下上下文:

UrlHelper urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext);

但是它HttpContext.Current正在向我返回null。

您需要传递当前的
RequestContext
。否则,它无法为您生成适当的URL,因为它缺少上下文:

UrlHelper urlHelper = new UrlHelper(this.Request.RequestContext);
默认(无参数)构造函数仅用于单元测试()


请参见

HMTLHelperExtensions.convertStringToRouteValueDictionary(myparameters)返回什么?返回一个包含路由值的列表。显然,在您的示例中运行时,它实际返回什么?变量
myparameters
的值是多少?对不起@Coulton。myparameters的值为“id=2”。结果返回一个键列表,在本例中是一个名为id的键,其值为2。有没有一种方法可以在不放置RequestContent的情况下执行此操作?我的类与控制器没有关系。你应该在视图中使用这个助手,我认为。。。不在控制器中我假设我们真的需要知道为什么要生成URL,以及在哪里生成URL,以找到一个合适的解决方案。您希望根据您在MVC应用程序中设置的路由自动生成URL,因此它需要这些信息。除了生成一个您知道是应用程序的正确URL的字符串之外,您还希望C#中的方法知道要生成什么URL吗?@Dan,
HttpContext
不可用的原因可能有很多。但是,如果您已经从业务层引用了
System.Web
(这通常不是一件好事),那么从调用方法传递当前的
RequestContext
。否则,您将不得不重新考虑url生成是否真正属于您的业务层。
UrlHelper urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext);
UrlHelper urlHelper = new UrlHelper(this.Request.RequestContext);