Skip to main content
 首页 » 编程设计

c#之HttpWebRequest UserAgent setter之此属性未由此类实现

2024年01月13日30mate10pro

我正在开发一个简单的应用程序。我正在尝试在我的应用程序中实现面子书。我已经完成了一个示例项目。但是,当我尝试在我的原始项目中实现时,出现错误 This property is not implemented by this class.。

public class FacebookLoginPageViewModel 
{ 
    private static WebBrowser _webBrowser; 
    private Page _page; 
    private const string ExtendedPermissions = "user_about_me,read_stream,publish_stream,user_birthday,offline_access,email"; 
    private readonly FacebookClient _fb = new FacebookClient(); 
    private const string AppId = "1XXX58XXXXXXXX9"; 
    Uri url; 
    public FacebookLoginPageViewModel(Panel container, Page page) 
    { 
        _page = page; 
        _webBrowser = new WebBrowser(); 
 
        var loginUrl = GetFacebookLoginUrl(AppId, ExtendedPermissions); 
        url = loginUrl; 
        container.Children.Add(_webBrowser); 
        _webBrowser.Navigated += webBrowser_Navigated; 
        _webBrowser.Navigate(loginUrl); 
    } 
 
    private Uri GetFacebookLoginUrl(string appId, string extendedPermissions) 
    { 
        var parameters = new Dictionary<string, object>(); 
        parameters["client_id"] = appId; 
        parameters["redirect_uri"] = "https://www.facebook.com/connect/login_success.html"; 
        parameters["response_type"] = "token"; 
        parameters["display"] = "touch"; 
 
        // add the 'scope' only if we have extendedPermissions. 
        if (!string.IsNullOrEmpty(extendedPermissions)) 
        { 
            // A comma-delimited list of permissions 
            parameters["scope"] = extendedPermissions; 
        } 
        return _fb.GetLoginUrl(parameters); 
    } 
 
    void webBrowser_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e) 
    { 
        FacebookOAuthResult oauthResult; 
        if (!_fb.TryParseOAuthCallbackUrl(e.Uri, out oauthResult)) 
        { 
            return; 
        } 
 
        if (oauthResult.IsSuccess) 
        { 
            var accessToken = oauthResult.AccessToken; 
            LoginSucceded(accessToken); 
        } 
        else 
        { 
            // user cancelled 
            MessageBox.Show(oauthResult.ErrorDescription); 
        } 
    } 
 
    private void LoginSucceded(string accessToken) 
    { 
        try 
        { 
            var fb = new FacebookClient(accessToken); 
 
            fb.GetCompleted += (o, e) => 
            { 
                if (e.Error != null) 
                { 
                    Deployment.Current.Dispatcher.BeginInvoke(() => 
                    { 
                        MessageBox.Show(e.Error.Message); 
                        return; 
                    }); 
                } 
 
                var result = (IDictionary<string, object>)e.GetResultData(); 
                var id = (string)result["id"]; 
 
                LoadFacebookData(accessToken, id); 
                var url = string.Format("/com/beno/WP7Client/views/FacebookLoginPage.xaml?access_token={0}&id={1}", accessToken, id); 
                var rootFrame = (App.Current as App).RootFrame; 
                Deployment.Current.Dispatcher.BeginInvoke(() => 
                { 
                    rootFrame.Navigate(new Uri(url, UriKind.Relative)); 
                }); 
            }; 
 
            fb.GetAsync("me?fields=id"); 
        } 
        catch(Exception ex) 
        { 
            Console.WriteLine("error.."+ex.ToString()); 
        } 
    } 

fb.GetAsync("me?fields=id"); 这里我收到的错误是

System.NotImplementedException: This property is not implemented by this class. 
   at System.Net.HttpWebRequest.SetUserAgent(String value) 
   at System.Net.HttpWebRequest.set_UserAgent(String value) 
   at Facebook.HttpWebRequestWrapper.set_UserAgent(String value) 
   at Facebook.HttpWebRequestWrapper.TrySetUserAgent(String userAgent) 
   at Facebook.FacebookClient.PrepareRequest(HttpMethod httpMethod, String path, Object parameters, 
  Type resultType, Stream& input, Boolean& containsEtag, IList`1& batchEtags) 
   at Facebook.FacebookClient.ApiAsync(HttpMethod httpMethod, String path, Object parameters, Type resultType, Object userState) 
   at Facebook.FacebookClient.GetAsync(String path, Object parameters, Object userState) 
   at Facebook.FacebookClient.GetAsync(String path) 
   at TestReactive.com.beno.WP7Client.ViewModels.FacebookViewModel.LoginSucceded(String accessToken) 
   at TestReactive.com.beno.WP7Client.ViewModels.FacebookViewModel.webBrowser_Navigated(Object sender, NavigationEvPID:0ED1004E TID:0F8A0042 entArgs e) 
   at Microsoft.Phone.Controls.WebBrowser.FireNavigatedEvent(Uri uri) 
   at Microsoft.Phone.Controls.WebBrowserInterop.ReversePInvokeThunk.OnNavigated(Int32 webBrowserControlId, String uri) 

我很困惑。为什么它在一个项目中工作? Y 它不在另一个项目中工作? 请告诉我解决此问题的任何想法。

请您参考如下方法:

当我尝试将 WebHeaderCollection 添加到 header 时,我遇到了类似的错误。在分配这些 header 期间发生异常。将抛出错误消息“该属性未由此类实现”。

解决方案,发现我在 WebRequest 实例化时提供的 URL 中有错误。

简而言之:我的 Web 请求中的格式错误的 URL 导致在将 header 添加到集合时抛出“此类未实现此属性”的错误。修复 URL 修复了错误。