Restsharpã¯ããã¹ãããããŒå€ã®ããŒããå€æŽããã«ããã¹ãããããŒããã®ãŸãŸéä¿¡ããå¿
èŠããããŸãã
https://github.com/minio/minio-dotnet/pull/212ã¯ãRestsharp.NetcoreïŒ.netcoreããµããŒãããéå
¬åŒããŒãžã§ã³ïŒã®ä»£ããã«Restsharp106.2.1ãå°å
¥ããŠããŸãã ãã ããminio dotnet sdkã§äœ¿çšãããŠããã«ã¹ã¿ã ãªãŒã»ã³ãã£ã±ãŒã¿ãŒããHostãããããŒã®å€ãšããŠipïŒportã䜿çšããŠèªèšŒçœ²åãäœæããããã眲åã®äžäžèŽãšã©ãŒãèŠã€ãããŸããã ãµãŒããŒãã¬ãŒã¹ã§ã¯ãã¹ãããããŒå€ã«IPã®ã¿ã衚瀺ãããŠãããããRestsharphttpclientã¯ããŒããåé€ããŠããããã§ãã
Restsharp106.2.1ã§ããŒããããã¹ããããããŒå€ããåé€ãããŠããŸã
minio-dotnet client side trace
---------------------------------------
Full URL of Request http://192.168.1.157:9000/
Request completed in 90.1376 ms, Request: {
"resource": "/",
"parameters": [
{
"name": "x-amz-content-sha256",
"value": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"type": "HttpHeader"
},
{
"name": "Host",
"value": "192.168.1.157:9000",
"type": "HttpHeader"
},
{
"name": "x-amz-date",
"value": "20180221T205958Z",
"type": "HttpHeader"
},
{
"name": "Authorization",
"value": "AWS4-HMAC-SHA256 Credential=minio/20180221/us-east-1/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=db0fbcc9aa66975a530a2621962a87787559289a218da881420686263da862df",
"type": "HttpHeader"
},
{
"name": "Accept",
"value": "application/json, application/xml, text/json, text/x-json, text/javascript, text/xml",
"type": "HttpHeader"
}
],
"method": "GET",
"uri": "http://192.168.1.157:9000/"
}, Response: {
"statusCode": 403,
"content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message><Key></Key><BucketName></BucketName><Resource>/</Resource><RequestId>3L137</RequestId><HostId>3L137</HostId></Error>",
"headers": [
{
"Name": "Accept-Ranges",
"Value": "bytes",
"Type": 3,
"ContentType": null
},
{
"Name": "Server",
"Value": "Minio/DEVELOPMENT.GOGET, (linux; amd64)",
"Type": 3,
"ContentType": null
},
{
"Name": "Vary",
"Value": "Origin",
"Type": 3,
"ContentType": null
},
{
"Name": "X-Amz-Request-Id",
"Value": "151572E9DCF94747",
"Type": 3,
"ContentType": null
},
{
"Name": "Date",
"Value": "Wed, 21 Feb 2018 20:59:58 GMT",
"Type": 3,
"ContentType": null
},
{
"Name": "Transfer-Encoding",
"Value": "chunked",
"Type": 3,
"ContentType": null
},
{
"Name": "Content-Type",
"Value": "application/xml",
"Type": 3,
"ContentType": null
}
],
"responseUri": "http://192.168.1.157:9000/",
"errorMessage": null
}
I'm not handling the Minio.Exceptions.MinioException.
Unhandled Exception: System.AggregateException: One or more errors occurred. (Minio API responded with message=The request signature we calculated does not match the signature you provided. Check your key and signing method.) (Minio API responded with message=The request signature we calculated does not match the signature you provided. Check your key and signing method.) ---> Minio.Exceptions.MinioException: Minio API responded with message=The request signature we calculated does not match the signature you provided. Check your key and signing method.
at Minio.MinioClient.ParseError(IRestResponse response) in /home/kris/code/minio-dotnet/Minio/MinioClient.cs:line 475
at Minio.MinioClient.<>c.<.ctor>b__78_0(IRestResponse response) in /home/kris/code/minio-dotnet/Minio/MinioClient.cs:line 70
at Minio.MinioClient.HandleIfErrorResponse(IRestResponse response, IEnumerable`1 handlers, DateTime startTime) in /home/kris/code/minio-dotnet/Minio/MinioClient.cs:line 502
at Minio.MinioClient.<ExecuteTaskAsync>d__81.MoveNext() in /home/kris/code/minio-dotnet/Minio/MinioClient.cs:line 349
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at Minio.MinioClient.<ListBucketsAsync>d__0.MoveNext() in /home/kris/code/minio-dotnet/Minio/ApiEndpoints/BucketOperations.cs:line 52
--- End of inner exception stack trace ---
at System.AggregateException.Handle(Func`2 predicate)
at SimpleTest.Program.Main(String[] args) in /home/kris/code/minio-dotnet/SimpleTest/Program.cs:line 47
Server side trace:
--------------------------
â minio git:(debugnet) minio server ~/ex
Drive Capacity: 6.9 GiB Free, 221 GiB Total
Endpoint: http://192.168.1.157:9000 http://172.17.0.1:9000 http://172.18.0.1:9000 http://172.19.0.1:9000 http://172.20.0.1:9000 http://127.0.0.1:9000
AccessKey: minio
SecretKey: minio123
Browser Access:
http://192.168.1.157:9000 http://172.17.0.1:9000 http://172.18.0.1:9000 http://172.19.0.1:9000 http://172.20.0.1:9000 http://127.0.0.1:9000
Command-line Access: https://docs.minio.io/docs/minio-client-quickstart-guide
$ mc config host add myminio http://192.168.1.157:9000 minio minio123
Object API (Amazon S3 compatible):
Go: https://docs.minio.io/docs/golang-client-quickstart-guide
Java: https://docs.minio.io/docs/java-client-quickstart-guide
Python: https://docs.minio.io/docs/python-client-quickstart-guide
JavaScript: https://docs.minio.io/docs/javascript-client-quickstart-guide
.NET: https://docs.minio.io/docs/dotnet-client-quickstart-guide
signed headers .... map[X-Amz-Content-Sha256:[e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] X-Amz-Date:[20180221T205638Z] Host:[192.168.1.157]]
ç°¡åãªãã¹ãã§åçŸããæ¹æ³ã¯ãããŸããïŒ
https://github.com/poornas/restsharp-test-ããã¯ãrestsharpã䜿çšããŠãªã¹ããã±ãããminioãµãŒããŒã«åŒã³åºãå¿ èŠã®ãªããããžã§ã¯ãã§ãã ã«ã¹ã¿ã ãªãŒã»ã³ãã£ã±ãŒã¿ãŒã䜿çšããŸã-眲åã®äžäžèŽãåå ã§å€±æããããšãããããŸãã ãªã¯ãšã¹ããrestsharpã«æž¡ããããšããµãŒããŒã«æž¡ãããåã«ããŒããåé€ãããŸãã
ããããšãã èŠãŠãä¿®æ£ããŠã¿ãŸãã
ããããšãïŒ
@alexeyzimarevãããåŒãèµ·ãããŠããå¯èœæ§ããããã®ã«ã€ããŠã®ã¢ã€ãã¢ã¯ãããŸããïŒ
@alexeyzimarev ãããã調ã¹ãæ©äŒã¯ãããããŸãããïŒ ããããšã
ä»ãã確èª
ç§ã¯ããªãã®åçŸãè€è£œããŸããããããŠç§ã¯ãããèŠãŸãïŒ
"parameters": [
...
{
"name": "Host",
"value": "play.minio.io:9000",
"type": "HttpHeader"
}
ãªã¯ãšã¹ãã®ãã©ã¡ãŒã¿ã¯åé¡ãªãããå€ããµãŒããŒã«é©åã«éä¿¡ãããŠããªããšããããšã§ããïŒ
@alexeyzimarev ãããã¯æ£ããã§ã-äžèšã®ãã¬ãŒã¹ã¯ãexecuteAsyncãåŒã³åºãåã®ãã®ã§ãã ExecuteAsyncãåŒã³åºããããšãRestsharpã¯Authenticateã¡ãœãããåŒã³åºããŸãããã®ã¡ãœããã§ã¯ãã«ã¹ã¿ã ãªãŒã»ã³ãã£ã±ãŒã¿ãŒã®urlïŒportã«åºã¥ããŠçœ²åèªèšŒããããŒãèšå®ããŸãã ãµãŒããŒã«ã¢ã¯ã»ã¹ããåãšAuthenticateïŒïŒåŒã³åºãã®åŸã«ãRestsharpã«ãã£ãŠããŒããåé€ãããããã§ãã
ããã«é¢ããæŽæ°ã¯ãããŸããïŒ ç§ãã¡ã¯ããã§ããªããããã¯ãããŠããŸãã
ç³ãèš³ãããŸãããããŸã ãããèŠãããšãã§ããŸããã§ããã ãããéåžžã«éèŠã§ããå Žåãçããã¯ããããããã°ããã®ã«1æéè²»ããããšãã§ããŸããïŒ
ç§ã¯ããããã£ãšèª¿ã¹ãŸããã ç§ã®ç¥ãéããããã§ã®åé¡ã¯å®éã«ã¯RestSharpã«ããã®ã§ã¯ãªããå®éã«ã¯System.Net
ã®HttpWebRequest
ïŒ$ã§ãïŒ
RestSharpãSystem.Netã«ãªã¯ãšã¹ããæž¡ããŸã§ã«ã HttpWebRequest
ã®Host
ããããã£ïŒUriïŒã«ã¯ãŸã ããŒãæ
å ±ãå«ãŸããŠããŸãã ãã ãã .SendRequest()
ãåŒã³åºããããšã䜿çšãããHostããããŒã«ã¯ããã¹ããšããŒãã§ã¯ãªããURIãã¹ãã®ã¿ãå
¥åãããŸãã
äžèšã®ãªã³ã¯ã«ããç§ã®ãããã¬ãŒã®ã¹ã¯ãªãŒã³ã·ã§ããã¯æ¬¡ã®ãšããã§ãã
ããã¯ãããŒãã®äœ¿çšãå°éããHTTPä»æ§ã«æããã«åããŸãã
ç§ãééã£ãŠããå Žåã¯ã誰ããç§ãèšæ£ããŠãã ãããç§ã¯dotnetãã¬ãŒã ã¯ãŒã¯ã«ãã°ãèŠã€ããããšããªãã®ã§ãéåžžãç§ãæã£ãŠãããšæããšãã¯-ç§ã¯èŠã€ããŠããŸããã ããã§ãªããã°ã次ã®ã¹ãããã¯CoreFXãªããžããªã§ãã®åé¡ãæèµ·ããããšã ãšæããŸããïŒ
äžãããïŒ
å®äº-ãã°ãååšããå Žæã§ãããåæ³ã§ãããã©ããã確èªããŸãããã
ãã 奜å¥å¿ã匷ã-ãããæè¿ã®.NETCoreã§ã®ãªã°ã¬ãã·ã§ã³ã§ãããã©ãã誰ããç¥ã£ãŠããŸããïŒ ïŒ2.1ïŒãŸãã¯æåŸã®å®å®çïŒ2.0ïŒã§ïŒ ãŸãã¯ã.NETFrameworkãš.NETCoreã®éãããŸãã¯OS WindowsãšLinuxã®éãã¯ãããŸããïŒ ïŒãããããªããã¯è¯ãçãã§ããããããšãïŒïŒ
@karelz TBHãã®åé¡ã調ã¹ãŠå¥ã®åé¡ã解決ããã®ã§ãã³ã³ãã€ã©ã®èŠåã衚瀺ãããªããªããŸããðãããããªããã®ã§ãMacOSã®.NET Core2.0ã§ã®ã¿è©ŠããŸããã ãã®ã©ã€ãã©ãªã¯ã.NETFrameworkã ãã§ãªã.NETCoreããµããŒãããããã«æè¿ïŒããããæ°ãæïŒã¢ããã°ã¬ãŒããããŸããã ãã¶ã@alexeyzimarevã¯ãã£ãšç¥ã£ãŠãããããããŸãããïŒ
å°ãªããšããåç¥ã®ãšããã.NET FrameworkïŒWindowsïŒã§åäœãã.NET Core 2.0ïŒMacïŒã§ã¯å€±æããŸãã ããã¯æ£ããèŠçŽã§ããïŒ
ããã-ç§ãåå ããŠããä»ã®ã¹ã¬ããããã¯ã.NET Core 2.0ã®ãã¹ãŠã®ãã©ãããã©ãŒã ã§å€±æãããšæããŸããã.NETFrameworkã«ã€ããŠã¯ããããŸããã
@karelzä»®å®ã¯æ£ãããšæããŸãã ãã«ãã¬ãŒã ã¯ãŒã¯ãã.netcore / standardã«å€æŽãããšããããã¹ãã倱æããŸããã .netæšæº2.0ãžã®ç§»è¡ã®ã¿ãè©Šã¿ãããã1.xããã®ãªã°ã¬ãã·ã§ã³ãã©ããã¯ããããŸããã
@niemyjski確èªããããšãããããŸãã ãã®æç¹ã§ã¯ãããã§ååãªæ å ±ã§ãã ç§ã¯ãã æ¢ç¥ã®äºå®/çµéšãåµå¯ããŠããŸããã
ãã®åé¡ã¯æªè§£æ±ºã®ãŸãŸã§ããïŒ
CoreFxã®ä¿®æ£ã¯PRã«ãããŸãïŒ https ïŒ//github.com/dotnet/corefx/pull/28375
ã¯ã ïŒïŒ
ããããšã
-Blake Niemyjski
2018幎3æ22æ¥æšææ¥ååŸ3æ57åãCaesar [email protected]
æžããŸããïŒ
CoreFxã®ä¿®æ£ã¯PRã«ãããŸãïŒdotnet / corefxïŒ28375
https://github.com/dotnet/corefx/pull/28375â
ããªããèšåãããã®ã§ãããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/restsharp/RestSharp/issues/1085#issuecomment-375454963 ã
ãŸãã¯ã¹ã¬ããããã¥ãŒãããŸã
https://github.com/notifications/unsubscribe-auth/AA-So67a2QfPq72jMHNxaSCBhDXiWXOMks5thBAygaJpZM4SOXLx
ã
ã¯ããã«é«éãªHttpClientã«åãæ¿ããããšãã§ããªãã£ãçç±ã¯ãããŸãããïŒ
äœæ¥ãç°¡åã§ããïŒ ãã®åé¡ã¯ãããŸãããïŒ
ããããšã
-Blake Niemyjski
2018幎3æ23æ¥éææ¥åå7æ14åãBlake Niemyjski [email protected]
æžããŸããïŒ
ã¯ã ïŒïŒ
ããããšã
-Blake Niemyjski2018幎3æ22æ¥æšææ¥ååŸ3æ57åãCaesar [email protected]
æžããŸããïŒCoreFxã®ä¿®æ£ã¯PRã«ãããŸãïŒdotnet / corefxïŒ28375
https://github.com/dotnet/corefx/pull/28375â
ããªããèšåãããã®ã§ãããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/restsharp/RestSharp/issues/1085#issuecomment-375454963 ã
ãŸãã¯ã¹ã¬ããããã¥ãŒãããŸã
https://github.com/notifications/unsubscribe-auth/AA-So67a2QfPq72jMHNxaSCBhDXiWXOMks5thBAygaJpZM4SOXLx
ã
@niemyjskiã¯ãRestSharpã®åãæ¿ãã§HttpWebRequest
HttpClient
ã䜿çšããããšãæå³ããŸããïŒ
ã¯ã ïŒïŒ
ããããšã
-Blake Niemyjski
2018幎3æ23æ¥éææ¥åå9æ22åãAlexey [email protected]
æžããŸããïŒ
@niemyjskihttps ïŒ//github.com/niemyjskiããªããåãæ¿ããããšãæå³ããŸã
RestSharpã¯HttpWebRequestã®ä»£ããã«HttpClientã䜿çšããŸããïŒâ
ããªããèšåãããã®ã§ãããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/restsharp/RestSharp/issues/1085#issuecomment-375680769 ã
ãŸãã¯ã¹ã¬ããããã¥ãŒãããŸã
https://github.com/notifications/unsubscribe-auth/AA-So0cbK66_Nq-MRdk0xwdb7sLPSGUoks5thQUUgaJpZM4SOXLx
ã
@niemyjski質åã¯1ã€ãŸãã¯å¥ã®ãã®ã§ããã_yes_ã¯å®éã«ã¯æå¹ãªçãã§ã¯ãããŸãã:)
RestSharpãHttpClient
ã䜿çšããå¿
èŠãããããšãæå³ããå Žåãç§ã¯ããã«è³æã§ãããååè©Šãããšãã¯ãRestClientã®ãã¹ãŠã®ãã©ã¡ãŒã¿ãŒãäžèŽãããã®ã«å€ãã®äœæ¥ãå¿
èŠã§ããã
ã¯ããHttpClientã«åãæ¿ããå¿ èŠããããŸããããã¯ãæè»æ§ãé«ããããã©ãŒãã³ã¹ãé«ããã©ãã§ãæ©èœããããšãããã£ãŠããææ°ã®APIã§ãã ç§ãã¡ã¯ããã€ãã®é倧ãªå€æŽãè¡ããã¡ãžã£ãŒãã¶ã€ããããšãã§ããŸã:)
ãããç§ã¯ããããã£ãŠå€§äžå€«ã§ãããç§ã¯ãããäžäººã§ãã£ãŠããŸããã ãã£ãŠã¿ãŸãããã倧å€ã§ããã ãŸããã³ãŒã«ããã¯ãåãå ¥ããéåæåŒã³åºããåé€ããŸãã ContinueWithã¯åé¡ãªãã¯ãã§ãã
ããã¯2.1ã«ããŒãžãããããã§ãããæ°ãããã¬ãã¥ãŒã2ãããåç §ããå€éçºè¡ãè¡ãå¿ èŠããããä»ã®ããã±ãŒãžãé·ã移åã§ããŸããïŒ 2.1æªæºã®ã©ã³ã¿ã€ã /ã©ã€ãã©ãªã«å¯ŸããŠå®è¡ã§ããåé¿çã¯ãããŸããïŒ
åé¿çã«ã€ããŠã¯ããããŸãã
ãã¬ãªãªãŒã¹ããªãã¡ã¬ã³ã¹2.1ãã¬ãã¥ãŒã«å€æŽããåã«ãæåã«ãªãªãŒã¹ãè¡ãå¿ èŠããããŸã
ããã¯è§£æ±ºãããŸãããïŒ 2.1rtmããã±ãŒãžã¯nugetã«ãããŸãã
ããã§ã2.1ã䜿ã£ãŠã¿ãŠã圌ãããããä¿®æ£ãããã©ããã確èªããå¿ èŠããããŸããïŒ
@ niemyjski 4æ20æ¥ã®ç§ã®ã³ã¡ã³ãã¯ã°ãããŠããŸãã ç§ã¯ã©ãã«ãäœãæãå¿ èŠã¯ãããŸããã ã©ã€ãã©ãªã¯.NETStandard2.0ã«ã³ã³ãã€ã«ãããŸãã ãã®ãšã©ãŒã¯ã.NET Core 2.0ã©ã³ã¿ã€ã ã®ãã°ãåå ã§çºçããããã.NET Core 2.1ã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãåæ§ç¯ãããšããã«ãåé¡ãä¿®æ£ãããã°ãåäœãéå§ããã¯ãã§ãã æ··ä¹±ããŠãã¿ãŸããã
æãåèã«ãªãã³ã¡ã³ã
äžãããïŒ