【问题标题】:how to send multipart/form-data in web services that c#?如何在 C# 的 Web 服务中发送 multipart/form-data?
【发布时间】:2019-04-14 21:30:59
【问题描述】:

如何在 Web 服务中读取 multipart/form-data? 我正在使用邮递员正文表单数据发送数据,但邮递员收到错误。

    public class Api : System.Web.Services.WebService
    {
        [WebMethod(EnableSession = true)]
        [ScriptMethod(ResponseFormat=ResponseFormat.Json)]
        public string Hell(string name)
        {
            return CommonUtilities.GetJSonSerialized(name);
        }
    }

error System.InvalidOperationException:请求格式无效: 多部分/表单数据;边界=----WebKitFormBoundary79Ky1A1Kfyyy7qUi。 在 System.Web.Services.Protocols.HttpServerProtocol.ReadParameters() 在 System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()

邮递员发现了这个错误。

enter image description here

【问题讨论】:

  • 请发布您的邮递员请求。
  • 发布您的 web.config
  • 你为什么要首先这样做?为什么要使用过时的 ASMX 堆栈而不是 WCF?在任何情况下,SOAP 都可以与 POST 一起使用,并且已经由框架处理
  • 您是否正在尝试创建 REST API?在这种情况下,您使用了错误的类/API。 ASMX 从不支持 REST,它只提供有限的 AJAX 支持。 WCF 仅提供基本支持作为权宜之计。要在 ASP.NET 中创建 REST API,您应该使用 ASP.NET Web API。
  • 我的要求是使用 ASMX 创建 Web 服务。

标签: c# asp.net postman


【解决方案1】:

Asmx 文件也可以用于创建 REST api(不推荐)。

这可以通过下面的代码sn-p来实现。

[ScriptService]
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

public class Randezvous : WebService
{
    [WebMethod]
    [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
    public void getUnitPersonels(string user, string pass, decimal unitNo)
    {
        JavaScriptSerializer serializer = new JavaScriptSerializer();
        Context.Response.Clear();
        Context.Response.ContentType = "application/json";
        #region ..:: Kullanıcı şİfre Kontrol ::..
        if (!(unit == "xxx" && pass == "yyy"))
        {

            string msg = "User or pass is wrong.";
            Context.Response.Write(serializer.Serialize(msg));
            return;
        }
        #endregion

        List<Personels> personels = _units.getUnitPersonels(unitNo);

        string jsonString = serializer.Serialize(personels);
        Context.Response.Write(jsonString);
    }
}

您可以使用如下所示的代码在 c# 中测试此代码:

using (var client = new HttpClient())
{
    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

    var builder = new UriBuilder("http://localhost:18511/Randezvous.asmx/getUnitPersonels");
    var query = HttpUtility.ParseQueryString(builder.Query);
    query["unitNo"] = "0";
    builder.Query = query.ToString();
    string url = builder.ToString();

    var result = Task.FromResult(client.GetAsync(url).Result).Result.Content;
    var resultJson = result.ReadAsStringAsync().Result;

}

【讨论】:

    猜你喜欢
    • 2016-11-14
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    • 1970-01-01
    • 2018-04-08
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    相关资源
    最近更新 更多