Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Post 在Xamarin WebView中发布请求?_Post_Xamarin_Webview_Xamarin.forms - Fatal编程技术网

Post 在Xamarin WebView中发布请求?

Post 在Xamarin WebView中发布请求?,post,xamarin,webview,xamarin.forms,Post,Xamarin,Webview,Xamarin.forms,我有一个简单的Xamarin.Forms页面,其中包含一个WebView,运行良好。 现在我想调用POST请求(发送表单数据)来获取URL。 我是否必须为Android、iOS和UWP创建3种不同的视图才能实现这一点?或者是否有办法在我的Xamarin表单项目的共享代码中只实现一次C#post请求代码?正如@hvaughan3所说,您可以使用HttpClient,就像这样(从Xamarin表单项目的共享代码中): 将HTTPcLient用于表单URL编码的post请求,然后创建自定义Webvie

我有一个简单的Xamarin.Forms页面,其中包含一个WebView,运行良好。 现在我想调用POST请求(发送表单数据)来获取URL。
我是否必须为Android、iOS和UWP创建3种不同的视图才能实现这一点?或者是否有办法在我的Xamarin表单项目的共享代码中只实现一次C#post请求代码?

正如@hvaughan3所说,您可以使用HttpClient,就像这样(从Xamarin表单项目的共享代码中):


将HTTPcLient用于表单URL编码的post请求,然后创建自定义Webview来处理Cookie。使用seansparkman创建的CookieWebView Nuget包


请检查通过Webview发布请求 用于WkWebview

[assembly: ExportRenderer(typeof(PaymentWebview), typeof(PaymentWebViewRenderer))]
namespace MMFInvestorApp.iOS.Utils
{
    public class PaymentWebViewRenderer : WkWebViewRenderer
    {
        protected override void OnElementChanged(VisualElementChangedEventArgs e)
        {
            base.OnElementChanged(e);

            if (NativeView != null)
            {
                var request = new NSMutableUrlRequest(new NSUrl(new NSString(paymentwebview.url))); //Your Url
                request.HttpMethod = "POST";
                request.Body = NSData.FromString(paymentwebview.data); //Data for POST
                request["Content-Length"] = req.Body.Length.ToString();
                request["Content-Type"] = "application/x-www-form-urlencoded charset=utf-8";
                LoadRequest(request);
            }

        }


    }
}
用于UIWebview(从2020年4月起弃用)

[assembly: ExportRenderer(typeof(PaymentWebview), typeof(PaymentWebViewRenderer))]
namespace MMFInvestorApp.iOS.Utils
{
    public class PaymentWebViewRenderer : WebViewRenderer
    {
        protected override void OnElementChanged(VisualElementChangedEventArgs e)
        {
            base.OnElementChanged(e);

            if (NativeView != null)
            {
                var paymentwebview = Element as PaymentWebview;
                var request = new NSMutableUrlRequest(new NSUrl(new NSString(paymentwebview.url)));//Your Url
                request.Body = paymentwebview.data; //Data for POST
                request.HttpMethod = "POST";
                LoadRequest(request);
            }

        }


    }
}

尝试使用
HttpClient
?谢谢。但是如何获得对webview的响应?我的POST请求是发布表单数据以登录网站。因此,用户应该登录并在登录后查看成功页面(并且应该以登录用户的身份与网站一起工作)。我不确定您想要实现什么。上面的responseFromServer变量将保存成功页面的html,您可以将其用于Web视图,但我不知道您的网站如何管理进一步请求的凭据等。我有一个带有简单登录表单的网页,我想绕过发送保存在Xamarin Ap中的凭据p通过POST发送到登录表单url,从那里开始,用户应使用登录的webview。使用HttpClient的方法,我只能将纯HTML传递到webview,而不包含cookie信息。我建议将webview指向登录表单(或应用程序的自定义版本)让网站来处理这一切。我假设webview会为你处理cookies,但我个人还没有尝试过这种事情。祝你好运!是的,我想这已经结束了。谢谢你的努力:-)
[assembly: ExportRenderer(typeof(PaymentWebview), typeof(PaymentWebViewRenderer))]
namespace MMFInvestorApp.iOS.Utils
{
    public class PaymentWebViewRenderer : WebViewRenderer
    {
        protected override void OnElementChanged(VisualElementChangedEventArgs e)
        {
            base.OnElementChanged(e);

            if (NativeView != null)
            {
                var paymentwebview = Element as PaymentWebview;
                var request = new NSMutableUrlRequest(new NSUrl(new NSString(paymentwebview.url)));//Your Url
                request.Body = paymentwebview.data; //Data for POST
                request.HttpMethod = "POST";
                LoadRequest(request);
            }

        }


    }
}