将长HTML字符串作为参数传递给MVC Controller

时间:2018-02-01 14:08:11

标签: c# asp.net-mvc asp.net-mvc-4 asp.net-web-api2

我正在开发Web API以及MVC应用程序。现在我的要求是将HTML作为字符串从MVC控制器传递给Web API方法。

我在MVC应用程序中使用了以下代码来调用Web服务:

 using (var client = new HttpClient())
        {
            byte[] Result = null;

            client.BaseAddress = new Uri("http://localhost:1004/");

            HttpResponseMessage Res = await client.GetAsync(string.Format("api/Method?htmlString={0}", htmlString));

            if (Res.IsSuccessStatusCode)
            {
                Result = Res.Content.ReadAsByteArrayAsync().Result;
            }

            if (Result != null)
            {
                //Work with byte array
            }
        }

以下是我在Web API中的方法声明

[HttpGet]
    [Route("api/Method")]
    public HttpResponseMessage Method(string htmlString)
    {
       try
       {
         //work with htmlString
        }
        catch (Exception ex)
        {
            HttpError err = new HttpError(ex.ToString());
            return Request.CreateResponse(HttpStatusCode.NotFound, err);   
        }
    }

但是上面的代码不起作用我正在犯错误

然后我实现了日志记录,发现Web API中的参数 htmlString 为空,这不应该在我传递HTML时发生

我甚至尝试在MVC中编码HTML,然后将其传递给Web API,但这也无效。

所以有人能告诉我在这种情况下该怎么做?

提前致谢

[编辑] 我试图从MVC应用程序传递简单的HTML,如下所示,我在Web API中获得了值

<html>
<body>
    Hello World.
</body>
</html>

然而,它不适用于我的长HTML

2 个答案:

答案 0 :(得分:3)

我认为你需要增加允许的URL长度或查询字符串大小:

<httpRuntime maxUrlLength="260" maxQueryStringLength="2048" />
  

允许更长或更短的路径(URL的那部分没有   包括协议,服务器名称和查询字符串),修改   maxUrlLength属性。要允许更长或更短的查询字符串,   修改maxQueryStringLength属性的值。

参考:

Expanding the Range of Allowable URLs

答案 1 :(得分:0)

好吧,我认为最好的方法是,如果您尝试传递某些内容到网络API,您应该使用POST请求将HTML内部发送http请求正文,因此您无需担心内容大小。