2sxc - 自定义 api 控制器中缺少 HttpResponseMessage 引用
2sxc - HttpResponseMessage reference missing in Custom api controller
当我 return 来自 SxcApiController
的基础或自定义对象时,一切正常,
但如果我尝试 return:
"HttpResponseMessage
",类似于:
return Request.CreateResponse(HttpStatusCode.BadRequest, new { Message = "ERROR : " + ex.Message } );
我收到错误:
'System.Net.Http.HttpResponseMessage' is defined in an assembly that
is not referenced. You must add a reference to assembly
'System.Net.Http, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a'.",
我该如何解决这个问题?如何添加对 api 控制器的附加引用?
我已经在 api 控制器中添加:“using System.Net.Http;
”,但这不是问题...
== 已添加 =============================
我在 2sxc.csproj 文件中找到了这段代码:
<Reference Include="System.Net.Http, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
<Reference Include="System.Net.Http.Formatting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
还有版本=2.0.0.0
这会是个问题吗?
== 完整控制器 =================================
using System;
using System.Net.Http;
using System.Web.Http;
using DotNetNuke.Data;
using DotNetNuke.Web.Api;
using DotNetNuke.Security;
using ToSic.SexyContent.WebApi;
public class InstallController : SxcApiController
{
[HttpGet]
[AllowAnonymous]
//[DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Host)]
//[ValidateAntiForgeryToken]
public object DbTablesCreate()
{
var result = new { P1 = "test1", P2 = "test2" } ;
try
{
// Some code I want to protect...
}
catch (Exception ex)
{
return Request.CreateResponse(HttpStatusCode.BadRequest, result);
//return new { Message = "Returned error with status code OK" };
}
return Request.CreateResponse(HttpStatusCode.OK, result);
//return new { Message = "Returned ok with status code OK" };
}
}
完整结果:500 内部服务器错误
{ "Message": "2sxc Api Controller Finder: Error while selecting /
compiling a controller for the request. Pls check the event-log and
the code. See the inner exception for more details.",
"ExceptionMessage":
"c:\websites\dev.lea-d.si\Portals[=19=]sxc\nnApp\api\InstallController.cs(23):
error CS0012: The type 'System.Net.Http.HttpRequestMessage' is defined
in an assembly that is not referenced. You must add a reference to
assembly 'System.Net.Http, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a'.", "ExceptionType":
"System.Web.HttpCompileException", "StackTrace": " at
System.Web.Compilation.AssemblyBuilder.Compile() at
System.Web.Compilation.BuildProvidersCompiler.PerformBuild() at
System.Web.Compilation.BuildManager.CompileWebFile(VirtualPath
virtualPath) at
System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath
virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean
allowBuildInPrecompile, Boolean throwIfNotFound, Boolean
ensureIsUpToDate) at
System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext
context, VirtualPath virtualPath, Boolean noBuild, Boolean
allowCrossApp, Boolean allowBuildInPrecompile, Boolean
throwIfNotFound, Boolean ensureIsUpToDate) at
System.Web.Compilation.BuildManager.GetVPathBuildResult(HttpContext
context, VirtualPath virtualPath, Boolean noBuild, Boolean
allowCrossApp, Boolean allowBuildInPrecompile, Boolean
ensureIsUpToDate) at
System.Web.Compilation.BuildManager.GetCompiledAssembly(String
virtualPath) at
ToSic.SexyContent.WebApi.AppApiControllerSelector.SelectController(HttpRequestMessage
request) in
C:\ProjectsSexyContent\Web\DesktopModules\ToSIC_SexyContent\Sxc
WebApi\AppApiControllerSelector.cs:line 77" }
==============解决方案1 ================
我复制了
System.Net.Http.dll
到站点的Bin文件夹,然后添加:
using System.Net;
using System.Net.Http;
现在工作
如错误消息所述,您需要将请求的 dll
添加到站点。该框架在站点的 bin
目录中搜索必要的参考资料,以便正确运行。
同时假设控制器是从 ApiController
派生的,您可以使用不同的语法尝试以下操作
[HttpGet]
[AllowAnonymous]
//[DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Host)]
//[ValidateAntiForgeryToken]
public IHttpActionResult DbTablesCreate() {
var result = new { P1 = "test1", P2 = "test2" } ;
try {
//...code removed for brevity
} catch (Exception ex) {
return Content(HttpStatusCode.BadRequest, result);
}
return OK(result);
}
我复制文件:
System.Net.Http.dll
到站点的Bin文件夹,然后添加:
using System.Net;
using System.Net.Http;
现在一切正常
当我 return 来自 SxcApiController
的基础或自定义对象时,一切正常,
但如果我尝试 return:
"HttpResponseMessage
",类似于:
return Request.CreateResponse(HttpStatusCode.BadRequest, new { Message = "ERROR : " + ex.Message } );
我收到错误:
'System.Net.Http.HttpResponseMessage' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.",
我该如何解决这个问题?如何添加对 api 控制器的附加引用?
我已经在 api 控制器中添加:“using System.Net.Http;
”,但这不是问题...
== 已添加 =============================
我在 2sxc.csproj 文件中找到了这段代码:
<Reference Include="System.Net.Http, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
<Reference Include="System.Net.Http.Formatting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
还有版本=2.0.0.0
这会是个问题吗?
== 完整控制器 =================================
using System;
using System.Net.Http;
using System.Web.Http;
using DotNetNuke.Data;
using DotNetNuke.Web.Api;
using DotNetNuke.Security;
using ToSic.SexyContent.WebApi;
public class InstallController : SxcApiController
{
[HttpGet]
[AllowAnonymous]
//[DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Host)]
//[ValidateAntiForgeryToken]
public object DbTablesCreate()
{
var result = new { P1 = "test1", P2 = "test2" } ;
try
{
// Some code I want to protect...
}
catch (Exception ex)
{
return Request.CreateResponse(HttpStatusCode.BadRequest, result);
//return new { Message = "Returned error with status code OK" };
}
return Request.CreateResponse(HttpStatusCode.OK, result);
//return new { Message = "Returned ok with status code OK" };
}
}
完整结果:500 内部服务器错误
{ "Message": "2sxc Api Controller Finder: Error while selecting / compiling a controller for the request. Pls check the event-log and the code. See the inner exception for more details.", "ExceptionMessage": "c:\websites\dev.lea-d.si\Portals[=19=]sxc\nnApp\api\InstallController.cs(23): error CS0012: The type 'System.Net.Http.HttpRequestMessage' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.", "ExceptionType": "System.Web.HttpCompileException", "StackTrace": " at System.Web.Compilation.AssemblyBuilder.Compile() at System.Web.Compilation.BuildProvidersCompiler.PerformBuild() at System.Web.Compilation.BuildManager.CompileWebFile(VirtualPath virtualPath) at System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) at System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) at System.Web.Compilation.BuildManager.GetVPathBuildResult(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean ensureIsUpToDate) at System.Web.Compilation.BuildManager.GetCompiledAssembly(String virtualPath) at ToSic.SexyContent.WebApi.AppApiControllerSelector.SelectController(HttpRequestMessage request) in C:\ProjectsSexyContent\Web\DesktopModules\ToSIC_SexyContent\Sxc WebApi\AppApiControllerSelector.cs:line 77" }
==============解决方案1 ================
我复制了
System.Net.Http.dll
到站点的Bin文件夹,然后添加:
using System.Net;
using System.Net.Http;
现在工作
如错误消息所述,您需要将请求的 dll
添加到站点。该框架在站点的 bin
目录中搜索必要的参考资料,以便正确运行。
同时假设控制器是从 ApiController
派生的,您可以使用不同的语法尝试以下操作
[HttpGet]
[AllowAnonymous]
//[DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Host)]
//[ValidateAntiForgeryToken]
public IHttpActionResult DbTablesCreate() {
var result = new { P1 = "test1", P2 = "test2" } ;
try {
//...code removed for brevity
} catch (Exception ex) {
return Content(HttpStatusCode.BadRequest, result);
}
return OK(result);
}
我复制文件:
System.Net.Http.dll
到站点的Bin文件夹,然后添加:
using System.Net;
using System.Net.Http;
现在一切正常