Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.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# 在同一个API调用c中上载文件和数据#_C#_File Upload_Asp.net Web Api2_Multipartform Data_Form Data - Fatal编程技术网

C# 在同一个API调用c中上载文件和数据#

C# 在同一个API调用c中上载文件和数据#,c#,file-upload,asp.net-web-api2,multipartform-data,form-data,C#,File Upload,Asp.net Web Api2,Multipartform Data,Form Data,在做了大量的研究之后,我发布了这个问题,因为我自己都搞不懂 该场景是,我需要将以下参数传递到.Net framework 4.8中的webapi 2控制器中的HttpPost请求: 日期->日期对象 作者->字符串 标题->字符串 内容->字符串 图像->文件对象 我的前端角度代码是: saveNewsArticle(data) { return new Observable(observer => { let apiStr = this.apiStrBase +

在做了大量的研究之后,我发布了这个问题,因为我自己都搞不懂

该场景是,我需要将以下参数传递到
.Net framework 4.8
中的
webapi 2控制器中的
HttpPost
请求:

  • 日期->日期对象
  • 作者->字符串
  • 标题->字符串
  • 内容->字符串
  • 图像->文件对象
我的前端角度代码是:

saveNewsArticle(data) {
    return new Observable(observer => {
      let apiStr = this.apiStrBase + "SaveNewsArticle";

      let formData = new FormData();
      formData.append('date', data.publishDate);
      formData.append('author', data.author);
      formData.append('title', data.title);
      formData.append('image', data.image);
      formData.append('content', data.content);

      this.httpClient.post(apiStr, formData).subscribe((result) => {
        observer.next({ result: true, data: result });
      },
        error => {
          observer.next({ result: false });
        }
      );
    });
  }
我的C#代码是:

所有这些都很好,但是,我正在使用一个所见即所得编辑器来获取文本的样式,因此
内容是
html
,例如,这是我的内容,我在c#中得到了这个错误:

以下是我迄今为止所尝试的:

  • 我不想使用

  • 我可以将其作为模型传递
    public void SaveArticle(Article-Article)
    这使得一切都很好,但图像总是
    null

  • 我可以替换,这就解决了问题 对我来说,但这不是应该怎么做的。这是一个黑客

  • 在MVC中,我们可以使用
    [ValidateInput(false)]
    [allowtml]
    但是不能在
    WebAPI 2
    上使用它

  • 我应该实现一个自定义格式化程序来处理
    多部分/表单数据吗


  • 非常感谢您的帮助/指导。

    向控制器提交HTML代码的其他方法如下

  • 提交为基本64字符串
  • 作为HTML编码字符串提交
  • 就我个人而言,我认为Base64更简单,在哪里呢

    JavaScript(编码)

    formData.append('content',btoa(data.content));
    
    C#(解码)

    var content=Encoding.UTF8.GetString(Convert.FromBase64String(HttpContext.Current.Request.Params[“content”]);
    

    你能分享
    文章
    类的代码吗?如果您使用
    文章
    作为Post Body in Action方法,您将如何访问
    图像
    ?这是否回答了您的问题?这与我在场景中描述的参数相同begining@ChetanRanpariya您建议的答案使用
    ifformfile
    ,它是
    .NetCore
    的一部分,我使用的是
    .netframework
    。请不要投票结束这个答案。如果这么简单,我一开始就不会发布这个问题。@CodeWarrior这是你收到的唯一例外消息吗?关于危险表单数据的一行?或者它是在告诉您没有合适的
    MediaTypeFormatter
    ?你能上传图片吗?如果没有,那么就有一个关于
    多部分/表单数据的配置或格式化程序问题
    
       [HttpPost]
       public void SaveNewsArticle()
       {
           var date = HttpContext.Current.Request.Params["date"];
           var author = HttpContext.Current.Request.Params["author"];
           var title = HttpContext.Current.Request.Params["title"];
           var content = HttpContext.Current.Request.Params["content"];
           var image = HttpContext.Current.Request.Files.Count > 0 ? HttpContext.Current.Request.Files[0] : null;
       }
    
    System.Web.HttpRequestValidationException: A potentially dangerous Request.Form value was detected from the client