簡體   English   中英

MVC請求Web Api

[英]MVC request to Web Api

我正在嘗試構建一個通過PCL向WebApi請求的MVC。 我發送了一個獲取請求,並在等待響應時陷入困境。 郵遞員返回正確的值。 發送時我也沒有例外。 這3個項目都在同一個解決方案上。

PCL

        HttpResponseMessage httpResponse = null;
        try
        {
             httpResponse = await _http.GetAsync( "http://localhost:43818/api/values" );

        }
        catch (Exception e)
        {
            var meessage = e.Message;
            var stack = e.StackTrace;

        }

        if (httpResponse.StatusCode == HttpStatusCode.OK)
        {
            string json = await httpResponse.Content.ReadAsStringAsync( );
        }

所以問題是,在PCL中,它沒有通過等待,它會被卡住。

MVC

       var result = apiClient.GetIndex( );

Web Api

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

另外,在渲染控制器視圖之前,我如何在MVC中等待響應

在您的類庫(PCL)中 ,創建方法GetIndex,如下所示,

    public async Task GetIndexAsync()
    {
        HttpResponseMessage httpResponse = null;
        try
        {
            _http.BaseAddress = new Uri("http://localhost:43818/");
            httpResponse = await _http.GetAsync("api/values");

        }
        catch (Exception e)
        {
            var meessage = e.Message;
            var stack = e.StackTrace;

        }

        if (httpResponse.StatusCode == HttpStatusCode.OK)
        {
            string json = await httpResponse.Content.ReadAsStringAsync();
        }
    }

並且在MVC調用方法如下,

var result = apiClient.GetIndexAsync().Wait();

這解決了你的問題。

好的,我找到了最好的溶劑。 阻塞線程不是一個好主意。

這是修復

PCL

public async Task<HttpResponseMessage> Register()
{
    HttpRequestMessage request = new HttpRequestMessage
    {
        RequestUri = new Uri( _http.BaseAddress, "account/register/" ),
        Method = HttpMethod.Post,
        Content = new StringContent( "{\"Email\": \"email@yahoo.com\",\"Password\": \"Password!1\",\"ConfirmPassword\": \"Password!1\"}",
        Encoding.UTF8,
        _contentType
        ),
    };


        HttpResponseMessage response = new HttpResponseMessage();

        try
        {
            response = await _http.SendAsync( request, CancellationToken.None );
        }
        catch (Exception e)
        {
            Debugger.Break();
        }

    return response;
}

MVC客戶端

    public async Task<ViewResult> Index( )
    {
        var thisTask = await Api.Register( );

        return View();
    }

暫無
暫無

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

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