Xamarin Forms出现Error 403: disallowed_useragent错误的解决求助
Xamarin Forms 解决Error 403: disallowed_useragent 适配方案
以下是你提供的Android Java代码对应的Xamarin C#适配实现:
核心代码对应关系
你给出的两行Java代码对应C#写法如下:
- Java常量定义:
public static final String USER_AGENT = "xxx"对应C#:public const string USER_AGENT = "Mozilla/5.0 (Linux; Android 4.1.1; Galaxy Nexus Build/JRO03C) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19"; - Java设置方法:
webView.getSettings().setUserAgentString(USER_AGENT)对应C#:webView.Settings.UserAgentString = USER_AGENT;
实现方式(二选一即可)
方案1:全局WebView自定义渲染(推荐)
该方案会修改项目中所有WebView的UserAgent,适配性最好:
- 在Xamarin.Forms对应的Android项目中新建自定义渲染类
CustomWebViewRenderer.cs - 写入如下代码,将代码中的
MyAppNamespace替换为你自己项目的命名空间即可:
using Android.Content; using MyAppNamespace.Droid.Renderers; using Xamarin.Forms; using Xamarin.Forms.Platform.Android; [assembly: ExportRenderer(typeof(WebView), typeof(CustomWebViewRenderer))] namespace MyAppNamespace.Droid.Renderers { public class CustomWebViewRenderer : WebViewRenderer { // 自定义UserAgent常量 public const string USER_AGENT = "Mozilla/5.0 (Linux; Android 4.1.1; Galaxy Nexus Build/JRO03C) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19"; public CustomWebViewRenderer(Context context) : base(context) { } protected override void OnElementChanged(ElementChangedEventArgs<WebView> e) { base.OnElementChanged(e); if (Control != null) { // 设置WebView的UserAgent Control.Settings.UserAgentString = USER_AGENT; } } } }
方案2:全局修改Android默认UserAgent(更简单)
如果不需要单独控制WebView,可以直接在Android项目的MainActivity.cs的OnCreate方法中添加如下代码:
protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); // 新增以下两行代码 const string USER_AGENT = "Mozilla/5.0 (Linux; Android 4.1.1; Galaxy Nexus Build/JRO03C) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19"; Android.Webkit.WebSettings.DefaultUserAgent = USER_AGENT; Xamarin.Essentials.Platform.Init(this, savedInstanceState); global::Xamarin.Forms.Forms.Init(this, savedInstanceState); LoadApplication(new App()); }
iOS端适配补充(可选)
如果你的项目同时需要适配iOS端相同的403错误,可以在iOS项目的AppDelegate.cs的FinishedLaunching方法中添加如下代码:
public override bool FinishedLaunching(UIApplication app, NSDictionary options) { // 新增以下代码 var userAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1"; NSUserDefaults.StandardUserDefaults.RegisterDefaults(new NSDictionary("UserAgent", NSString.FromString(userAgent))); global::Xamarin.Forms.Forms.Init(); LoadApplication(new App()); return base.FinishedLaunching(app, options); }
内容的提问来源于stack exchange,提问作者JBD
相关产品推荐
相关产品推荐

