簡體   English   中英

將 http 帖子發送到 dot net webapi

[英]Sending http post to dot net webapi

我有這個問題

使用獲取

我想發送一個 http 帖子

這是我的 android 類和請求方法

    public static String readUrl(String url, ArrayList<NameValuePair> params) {
    try {
        HttpClient client = new DefaultHttpClient();
        HttpPost method = new HttpPost(url);

        if (params != null) {
            method.setEntity(new UrlEncodedFormEntity(params));

        }

        HttpResponse response = client.execute(method);

        InputStream inputStream = response.getEntity().getContent();
        String result = convertInputStreamToString(inputStream);

        return result;
    }
    catch (ClientProtocolException e) {
        e.printStackTrace();
    }
    catch (IOException e) {
        e.printStackTrace();
    }

    return null;
}

這是請求代碼

                                ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
                                params.add(new BasicNameValuePair("region","1"));
                                params.add(new BasicNameValuePair("area","1"));
                                params.add(new BasicNameValuePair("sector","1"));
                                params.add(new BasicNameValuePair("address",edtReqAddres.getText().toString()));
                                params.add(new BasicNameValuePair("mobile",edtMobileNumber.getText().toString()));

                                params.add(new BasicNameValuePair("username","test"));
                                params.add(new BasicNameValuePair("message", edtSubject.getText().toString()));
                                params.add(new BasicNameValuePair("compid","0"));
                                params.add(new BasicNameValuePair("geo","1"));


                                text = webservice.readUrl("http://192.168.1.102:81/api/products", params);

這也是我的結果:(

{"Message":"未找到與請求 URI ' http://192.168.1.102:81/api/products '匹配的 HTTP 資源。"}

這是我的 WebApi (DotNet)

    [System.Web.Http.AcceptVerbs("GET", "POST")]
    public string GetProductById(int region, int area, int sector, string address, string mobile, string username, string message, int compid, string geo)
    {
      fddService.mobService service=new mobService();
      return service.NewMessage(region, area, sector, address, mobile, "", message, compid, "");
    }

如果您在 Visual Studio 中使用 ASP.NET WebAPI,您可以添加一個新的 Web API 控制器類 (v2.1),那么您將擁有以下默認代碼:

public class ProductsController : ApiController
    {
        // GET api/<controller>
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }

    // GET api/<controller>/5
    public string Get(int id)
    {
        return "value";
    }

    // POST api/<controller>
    public void Post([FromBody]string value)
    {
    }

    // PUT api/<controller>/5
    public void Put(int id, [FromBody]string value)
    {
    }

    // DELETE api/<controller>/5
    public void Delete(int id)
    {
    }
}

然后,假設您有一個 DTO 類,例如Product ,您可以按如下方式自定義 Web API:

        // POST: api/Products
        [ResponseType(typeof(Product))]
        public async Task<IHttpActionResult> PostProduct(Product product)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            db.Products.Add(product);
            await db.SaveChangesAsync();

            return CreatedAtRoute("DefaultApi", new { id = product.Id }, product);
        }

您將在了解 ASP.NET Web API 中找到更多信息

所以最后我在客戶端找到了答案您應該將此行添加到您的代碼中以設置默認內容類型

httpPost.addHeader("Content-type", "application/x-www-form-urlencoded");

后端服務器(的WebAPI)應該創建一個模型視圖發送PARAMS,並添加[FromBody]在輸入PARAMS這樣的開頭

public string postreq([FromBody] RequestViewModel model)
{
    fddService.mobService service = new mobService();
    if (model.geo == "1")
        return service.NewMessage(Convert.ToInt32(model.region), Convert.ToInt32(model.area),
            Convert.ToInt32(model.sector), model.address, model.mobile, "", model.message, Convert.ToInt32(model.compid), "");
    else
        return service.NewMessage(Convert.ToInt32(model.region), Convert.ToInt32(model.area),
            Convert.ToInt32(model.sector), model.address, model.mobile, "", model.message, Convert.ToInt32(model.compid), model.geo);
}
public class RequestViewModel
{
    public string region { get; set; }
    public string area { get; set; }
    public string sector { get; set; }
    public string address { get; set; }
    public string mobile { get; set; }
    public string username { get; set; }
    public string message { get; set; }
    public string compid { get; set; }
    public string geo { get; set; }
}

如果您收到此{"Message":"An error has occurred."}

確保您的 android 客戶端使用正確的 POST 代碼正確傳遞您的參數。

感謝:Earthling POST 數據從 Android 到 Web API 返回 404

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM