1

Though there were already some threads on issues like this a few years ago (e.g. Add Authorization header to all requests in Xamarin Forms Android WebView), I am wondering now if there were a solid solution meanwhile to add custom headers to all reqests (GET, PUT, POST...) while using WebFormClient with Xamarin.

ShouldInterceptRequest, ShouldOverrideUrlLoading methods overridden to add custom headers but the headers were not added:

public override WebResourceResponse ShouldInterceptRequest(WebView view, IWebResourceRequest urlResource)
{
    if (urlResource.RequestHeaders != null && !urlResource.RequestHeaders.ContainsKey("X-LPPTAgent"))
    {
        urlResource.RequestHeaders.Add("key", "value");
    }

    return base.ShouldInterceptRequest(view, urlResource);
}


public override bool ShouldOverrideUrlLoading(WebView view, IWebResourceRequest request)
{
    WebView.SetWebContentsDebuggingEnabled(true);

    if (request.RequestHeaders != null && !request.RequestHeaders.ContainsKey("X-LPPTAgent"))
    {
        request.RequestHeaders.Add("key", "value");
    }
    return base.ShouldOverrideUrlLoading(view, request);
}

Another version of ShouldInterceptRequest - this works, but only for GET requests:

public override WebResourceResponse ShouldInterceptRequest(WebView view, IWebResourceRequest urlResource)
{
    var client = new HttpClient();
    client.DefaultRequestHeaders.Add("key", "value");

    var requestMessage = GetRequestMessage(urlResource.Url.ToString(), urlResource.Method);

    var result = client.SendAsync(requestMessage).Result;
    var stream = result.Content.ReadAsStreamAsync().Result;

    var contentType = result.Content.Headers.ContentType;
    if (contentType != null)
    {
        return new WebResourceResponse(contentType.MediaType, contentType.CharSet, (int)result.StatusCode, result.ReasonPhrase, urlResource.RequestHeaders, stream);
    }
    return new WebResourceResponse(string.Empty, string.Empty, (int)result.StatusCode, result.ReasonPhrase, urlResource.RequestHeaders, stream);
}

since body cannot be sent with as it is not available in WebResourcerequest.

ane
  • 11
  • 2
  • 1
    According to this case about [adding header in the android native webview's post request](https://stackoverflow.com/questions/21754526/android-webview-post-request-with-custom-headers), there is no api can do this. But you can add it in the get request. – Liyun Zhang - MSFT Dec 07 '22 at 09:42

0 Answers0