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;

现在一切正常