发送请求时出错

时间:2021-02-22 05:19:09

标签: c# asp.net-mvc api model-view-controller tcp

<块引用>

发送请求时出错。===22/02/2021 09:14:31 - - - - - - - - - - - - - - - 堆栈跟踪 - - - - - - - - - - - - - - - - - - - - - - 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在 System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() 在 SingPost.NMP.Client.Internal.Areas.PPP.Controllers.TransactionController.d__1fd.MoveNext() --- 从上一个抛出异常的位置开始的堆栈跟踪结束 --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在 System.Web.Mvc.Async.TaskAsyncActionDescriptor.EndExecute(IAsyncResult 异步结果)在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.b__36(IAsyncResult 异步结果)在 System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.b__3d() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.b__3f() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass33.b__32(IAsyncResult asyncResult) 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass21.<>c__DisplayClass2b.b__1c() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass21.b__1e(IAsyncResult asyncResult)===22/02/2021 09:14:31

从控制器调用 API 时收到上述错误消息。 控制器代码

[HttpGet]
        public async Task<ActionResult> ToEnableDisableARandRABasedonRateScheme(long mailSchemeId)
        {
            bool updated = false;
            var headerSaveUri = string.Format("{0}/{1}/{2}", ClientConstant.WEBAPI_URI_PPI_TRANSACTION, APIMETOD_TOENABLEDISABLEARANDRABASEDONRATESCHEME, mailSchemeId);
            var client = GetHTTPClient(headerSaveUri);
            HttpResponseMessage responseMessage = await client.GetAsync(headerSaveUri);
            if (responseMessage.IsSuccessStatusCode)
            {
                var responseData = responseMessage.Content.ReadAsStringAsync().Result;
                updated = JsonConvert.DeserializeObject<bool>(responseData);
            }
            return Json(updated, JsonRequestBehavior.AllowGet);
        }

HTTP 代码

public HttpClient GetHTTPClient(string uri)
        {
            HttpClient client = new HttpClient();
            client.BaseAddress = new Uri(uri);
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(ClientConstant.HTTP_TYPE));
            return client;
        }

在应用程序启动事件的 global.asax 中,我还添加了以下代码

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

2 个答案:

答案 0 :(得分:0)

控制器:

public HttpClient GetHTTPClient(string uri)
{
    HttpClient client = new HttpClient();
    client.BaseAddress = new Uri(uri);
    client.DefaultRequestHeaders.Accept.Clear();
    //client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(ClientConstant.HTTP_TYPE));
    return client;
}

[HttpGet]
public async Task<ActionResult> ToEnableDisableARandRABasedonRateScheme(long? mailSchemeId)
{
    bool updated = false;
    var headerSaveUri = "http://localhost:26272/";//string.Format("{0}/{1}/{2}", ClientConstant.WEBAPI_URI_PPI_TRANSACTION, APIMETOD_TOENABLEDISABLEARANDRABASEDONRATESCHEME, mailSchemeId);
    var client = GetHTTPClient(headerSaveUri);
    var uri = $"api/Values/GetTheValue/123";
    HttpResponseMessage responseMessage = await client.GetAsync(uri);
    if (responseMessage.IsSuccessStatusCode)
    {
        var responseData = responseMessage.Content.ReadAsStringAsync().Result;
        //https://stackoverflow.com/questions/22838302/deserialize-json-to-c-sharp-bool
        //string json = @"{""valid"":true}";

        var jo = JObject.Parse(responseData);
        bool flag = jo.SelectToken("updated").Value<bool>();
        updated = flag;
    }
    return Json(updated, JsonRequestBehavior.AllowGet);
}

Web.API

[Route("api/Values/GetTheValue/{partner}")]
public PassMeClass GetTheValue(string partner)
{
    Request = new HttpRequestMessage();
    Request.Properties.Add(HttpPropertyKeys.HttpConfigurationKey, new HttpConfiguration());

    Configuration = new HttpConfiguration();

    var theClinic = new PassMeClass();
    theClinic.updated = true;

    return theClinic;
}

public class PassMeClass
{
    public bool updated { get; set; }
}

property of Web.API

答案 1 :(得分:0)

尝试在以下函数中将 actionresult 改为 jsonresult:

     [HttpGet]
    public async Task<JsonResult> ToEnableDisableARandRABasedonRateScheme(long mailSchemeId)
    {
        bool updated = false;
        var headerSaveUri = string.Format("{0}/{1}/{2}", ClientConstant.WEBAPI_URI_PPI_TRANSACTION, APIMETOD_TOENABLEDISABLEARANDRABASEDONRATESCHEME, mailSchemeId);
        var client = GetHTTPClient(headerSaveUri);
        HttpResponseMessage responseMessage = await client.GetAsync(headerSaveUri);
        if (responseMessage.IsSuccessStatusCode)
        {
            var responseData = responseMessage.Content.ReadAsStringAsync().Result;
            updated = JsonConvert.DeserializeObject<bool>(responseData);
        }
        return Json(updated, JsonRequestBehavior.AllowGet);
    }