提示コードですが///
のコード下記の例外が発生します。これはどう対処したらいいのでしょうか?
提示コードはMastonet
APIを用いて認証インスタンスを行いたいのですが上手くデータが返ってきていないせいか.jsonでエラーが発生するようです。原因としてはmstdn.jpではHTTPリクエストでユーザーエージェントを入れないとアクセス拒否される仕様のようです。この問題の解決のためUser-agent を操作してgoogle chormを指定すればよいという情報を得たのですがどう修正すればいいのでしょうか?リファレンスを見ましたが引数に何を入れたらいいかわかりません。
例外
例外がスローされました: 'System.IO.FileNotFoundException' (ClassLibrary1.dll の中) 例外がスローされました: 'System.IO.FileNotFoundException' (System.Private.CoreLib.dll の中) 例外がスローされました: 'System.IO.FileNotFoundException' (System.Private.CoreLib.dll の中) 例外がスローされました: 'System.IO.FileNotFoundException' (System.Private.CoreLib.dll の中) 型 'System.IO.FileNotFoundException' の例外が System.Private.CoreLib.dll で発生しましたが、ユーザー コード内ではハンドルされませんでした Could not load file or assembly 'Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed'. 指定されたファイルが見つかりません。
参考サイト
認証インスタンスサイト: https://mstdn.jp/
A https://kmycode.hatenablog.jp/entry/2017/04/23/113328
B https://github.com/glacasa/Mastonet/blob/main/DOC.md
C https://makky12.hatenablog.com/entry/2017/05/03/201800
エラー: https://ohke.hateblo.jp/entry/2017/04/21/220000
ヒント: https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14236476004
リファレンス: https://learn.microsoft.com/ja-jp/dotnet/api/system.net.http.headers.httpheaders.add?view=net-7.0
利用ライブラリ
Mastonet: https://github.com/glacasa/Mastonet/tree/b04bfdb3cfc1b365b2487c8bbd019e4640293306
環境
Windows 10
visual sutido 2022
.net frameWork
Mastonetライブラリコード
cs
1 2 public abstract class BaseHttpClient : IBaseHttpClient 3 { 4 protected readonly HttpClient client; 5 public AppRegistration? AppRegistration { get; set; } 6 public Auth? AuthToken { get; set; } 7 8 #region Instance 9 private string instance = string.Empty; 10 public string Instance 11 { 12 get 13 { 14 return instance; 15 } 16 set 17 { 18 CheckInstance(value); 19 instance = value; 20 } 21 } 22 23 private void CheckInstance(string instance) 24 { 25 var notSupportedList = new List<string> { "gab.", "truthsocial." }; 26 var lowered = instance.ToLowerInvariant(); 27 if (notSupportedList.Any(n => lowered.Contains(n))) 28 { 29 throw new NotSupportedException(); 30 } 31 } 32 33 #endregion 34 35 protected BaseHttpClient(HttpClient client) 36 { 37 this.client = client; 38 } 39 40 #region Http helpers 41/////////////////////////////////////////////////////////////////////////////////////////////// 42 private void AddHttpHeader(HttpRequestMessage request) 43 { 44 Debug.WriteLine("AuthToken.AccessToken"); 45 request.Headers.Add("Authorization", "107.0.0.0"); 46 47 if (AuthToken != null) 48 { 49 Debug.WriteLine("AuthToken.AccessToken " + AuthToken.AccessToken); 50 request.Headers.Add("Authorization", "Bearer " + AuthToken.AccessToken); 51 } 52 } 53/////////////////////////////////////////////////////////////////////////////////////////////// 54 protected async Task<string> Delete(string route, IEnumerable<KeyValuePair<string, string>>? data = null) 55 { 56 string url = "https://" + this.Instance + route; 57 if (data != null) 58 { 59 var querystring = "?" + String.Join("&", data.Select(kvp => kvp.Key + "=" + kvp.Value)); 60 url += querystring; 61 } 62 63 using (var request = new HttpRequestMessage(HttpMethod.Delete, url)) 64 { 65 AddHttpHeader(request); 66 using (var response = await client.SendAsync(request)) 67 return await response.Content.ReadAsStringAsync(); 68 } 69 } 70
ライブラリ利用側コード
cs
1using Mastonet; 2using Mastonet.Entities; 3using System; 4using System.Collections.Generic; 5using System.Diagnostics; 6using System.Linq; 7using System.Text; 8using System.Threading.Tasks; 9 10namespace ConsoleApp2 11{ 12 internal class Program 13 { 14 private async static Task f() 15 { 16 17 var authClient = new AuthenticationClient("mstdn.jp"); 18 ///////////////////////////////////////////////////////////////////// 19 var appRegistration = await authClient.CreateApp("test", Scope.Read | Scope.Write | Scope.Follow); 20 ///////////////////////////////////////////////////////////////////// 21 var url = authClient.OAuthUrl(); 22 23 ProcessStartInfo pi = new ProcessStartInfo(); 24 pi.FileName = url; 25 pi.UseShellExecute = true; 26 27 Process.Start(pi); 28 29 string str = Console.ReadLine(); 30 var authURL = authClient.OAuthUrl(str); 31 32 /* 33 var auth = await authClient.ConnectWithPassword(id, pass); 34 var client = new MastodonClient(appRegistration, auth); 35 */ 36 } 37 38 39 public async static void t() 40 { 41 await f(); 42 } 43 44 static void Main(string[] args) 45 { 46 t(); 47 48 49 Console.ReadKey(); 50 } 51 } 52} 53
こちらの質問が複数のユーザーから「調査したこと・試したことが記載されていない質問」という指摘を受けました。
あなたの回答
tips
プレビュー