Restsharp: ํฌํŠธ๊ฐ€ ํ˜ธ์ŠคํŠธ ํ—ค๋”์—์„œ ์ œ๊ฑฐ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2018๋…„ 02์›” 21์ผ  ยท  35์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: restsharp/RestSharp

์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘

Restsharp๋Š” Host ํ—ค๋” ๊ฐ’์˜ ํฌํŠธ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  Host ํ—ค๋”๋ฅผ ๊ทธ๋Œ€๋กœ ๋ณด๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
https://github.com/minio/minio-dotnet/pull/212 ๋Š” Restsharp.Netcore(.netcore๋ฅผ ์ง€์›ํ•˜๋Š” ๋น„๊ณต์‹ ๋ฒ„์ „) ๋Œ€์‹  Restsharp 106.2.1์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ minio dotnet sdk์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž ์ง€์ • ์ธ์ฆ์ž๊ฐ€ "Host" ํ—ค๋”์˜ ๊ฐ’์œผ๋กœ ip:port๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์ฆ ์„œ๋ช…์„ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ช… ๋ถˆ์ผ์น˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ๊ฒฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„ ์ถ”์ ์ด ํ˜ธ์ŠคํŠธ ํ—ค๋” ๊ฐ’์— ip๋งŒ ํ‘œ์‹œํ•˜๊ธฐ ๋•Œ๋ฌธ์— Restsharp httpclient๊ฐ€ ํฌํŠธ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์‹ค์ œ ํ–‰๋™

ํฌํŠธ๋Š” Restsharp 106.2.1์˜ "ํ˜ธ์ŠคํŠธ" ํ—ค๋” ๊ฐ’์—์„œ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ ์žฌํ˜„ ๋‹จ๊ณ„

  1. minio-dotnet sdk๋ฅผ ๋ณต์ œํ•˜๊ณ  ํŒจ์น˜๋ฅผ ๋ฐ›์œผ์‹ญ์‹œ์˜ค. https://github.com/minio/minio-dotnet/pull/212
    โžœ minio-dotnet git:(02cbcb5) โœ— dotnet ๋ณต์›, dotnet ๋นŒ๋“œ
    โžœ minio-dotnet git:(02cbcb5) โœ— dotnet run --project SimpleTest
    2.
    ์‚ผ.

๋ช…์„ธ์„œ

  • ๋ฒ„์ „: 106.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]]

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์˜ฌ๋ ค๋ณด์ž!

๋ชจ๋“  35 ๋Œ“๊ธ€

๊ฐ„๋‹จํ•œ ํ…Œ์ŠคํŠธ๋กœ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์„๊นŒ์š”?

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๋Š” ์‚ฌ์šฉ์ž ์ง€์ • ์ธ์ฆ์ž์˜ url:port ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์„œ๋ช… ๊ถŒํ•œ ๋ถ€์—ฌ ํ—ค๋”๋ฅผ ์„ค์ •ํ•˜๋Š” Authenticate ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ํฌํŠธ๋Š” ์„œ๋ฒ„์— ๋„๋‹ฌํ•˜๊ธฐ ์ „๊ณผ Authenticate() ํ˜ธ์ถœ ํ›„์— Restsharp์— ์˜ํ•ด ์ œ๊ฑฐ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์— ๋Œ€ํ•ด ๊ฝค ์—ด์‹ฌํžˆ ์ฐจ๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์•„์ง ์ด๊ฒƒ๋ฐ–์— ๋ชป๋ด์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋งค์šฐ ์ค‘์š”ํ•œ ๊ฒฝ์šฐ ๋””๋ฒ„๊น…ํ•˜๋Š” ๋ฐ ํ•œ ์‹œ๊ฐ„์„ ํ• ์• ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” ์ด๊ฒƒ์— ๋Œ€ํ•ด ๋น ๋ฅด๊ฒŒ ์‚ดํŽด๋ณด์•˜๋‹ค. ๋‚ด๊ฐ€ ๋งํ•  ์ˆ˜ ์žˆ๋Š” ํ•œ, ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๋Š” ์‹ค์ œ๋กœ RestSharp์— ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์‹ค์ œ๋กœ $#$ System.Net HttpWebRequest $์ž…๋‹ˆ๋‹ค!

RestSharp๊ฐ€ System.Net์— ์š”์ฒญ์„ ์ „๋‹ฌํ•  ๋•Œ๊นŒ์ง€ $#$ HttpWebRequest $#$์˜ Host ์†์„ฑ(Uri)์—๋Š” ์—ฌ์ „ํžˆ ํฌํŠธ ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ .SendRequest() ๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ์‚ฌ์šฉ๋˜๋Š” Host ํ—ค๋”๋Š” host ๋ฐ port๊ฐ€ ์•„๋‹Œ URI Host๋กœ๋งŒ ์ฑ„์›Œ์ง‘๋‹ˆ๋‹ค .

๋‹ค์Œ์€ ์œ„์˜ ๋งํฌ์— ์žˆ๋Š” ๋‚ด ๋””๋ฒ„๊ฑฐ์˜ ์Šคํฌ๋ฆฐ์ƒท์ž…๋‹ˆ๋‹ค.
screen shot 2018-03-22 at 11 22 52 am

์ด๊ฒƒ์€ ํฌํŠธ ์‚ฌ์šฉ์„ ์กด์ค‘ํ•˜๋Š” HTTP ์‚ฌ์–‘ ์— ๋ช…๋ฐฑํžˆ ์–ด๊ธ‹๋‚ฉ๋‹ˆ๋‹ค.

dotnet ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ๋ฒ„๊ทธ๋ฅผ ๋ฐœ๊ฒฌํ•œ ์ ์ด ์—†๊ณ  ์ผ๋ฐ˜์ ์œผ๋กœ ๋‚ด๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ๋ฒ„๊ทธ๋ฅผ ๋ฐœ๊ฒฌํ•˜์ง€ ๋ชปํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ํ‹€๋ ธ๋‹ค๋ฉด ์ €๋ฅผ ์ˆ˜์ •ํ•ด ์ฃผ์„ธ์š”. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๊ฐ€ CoreFX ์ €์žฅ์†Œ์—์„œ ์ด ๋ฌธ์ œ๋ฅผ ์ œ๊ธฐํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๊นŒ?

์˜ฌ๋ ค๋ณด์ž!

์™„๋ฃŒ - ๋ฒ„๊ทธ๊ฐ€ ์žˆ๋Š”์ง€ ์—†๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๊ถ๊ธˆํ•ด์„œ์š” - ์ตœ๊ทผ .NET Core์˜ ํšŒ๊ท€์ธ์ง€ ์•„๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? (2.1) ์•„๋‹ˆ๋ฉด ๋งˆ์ง€๋ง‰ ์•ˆ์ •(2.0)์œผ๋กœ? ๋˜๋Š” .NET Framework์™€ .NET Core์˜ ์ฐจ์ด์  ๋˜๋Š” OS Windows์™€ Linux์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ("๋ชจ๋ฅธ๋‹ค"๋Š” ์ข‹์€ ๋Œ€๋‹ต์ž…๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!)

@karelz TBH ์ปดํŒŒ์ผ๋Ÿฌ ๊ฒฝ๊ณ ๋ฅผ ๋ฐ›์ง€ ์•Š๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ด ๋ฌธ์ œ๋ฅผ ์กฐ์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค ๐Ÿ˜† ์ €์—๊ฒŒ๋Š” "๋ชจ๋ฅธ๋‹ค"๊ณ  MacOS์˜ .NET Core 2.0์—์„œ๋งŒ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” .NET Framework๋ฅผ ํ†ตํ•ด .NET Core๋ฅผ ์ง€์›ํ•˜๋„๋ก ์—…๊ทธ๋ ˆ์ด๋“œ๋œ ์ตœ๊ทผ(๋ช‡ ๊ฐœ์›”)์ž…๋‹ˆ๋‹ค. @alexeyzimarev ๊ฐ€ ๋” ๋งŽ์ด ์•Œ ์ˆ˜ ์žˆ์„๊นŒ์š”?

์ข‹์Šต๋‹ˆ๋‹ค. ์ตœ์†Œํ•œ .NET Framework(Windows)์—์„œ๋Š” ์ž‘๋™ํ•˜๊ณ  .NET Core 2.0(Mac)์—์„œ๋Š” ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ์ •ํ™•ํ•œ ์š”์•ฝ์ธ๊ฐ€์š”?

์•„๋‹ˆ์š” - ๋‚ด๊ฐ€ ์†ํ•œ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์—์„œ .NET Core 2.0์˜ ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ์‹คํŒจํ•˜๊ณ  .NET Framework์— ๋Œ€ํ•ด์„œ๋Š” ๋ชจ๋ฆ…๋‹ˆ๋‹ค.

@karelz ๊ทธ ๊ฐ€์ •์ด ์˜ณ์„ ๊ฒƒ์ด๋ผ๊ณ  ๋งํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋ฐฉ๊ธˆ ์ „์ฒด ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ .net ์ฝ”์–ด/ํ‘œ์ค€์œผ๋กœ ๋ณ€๊ฒฝํ•œ ๋‹ค์Œ ํ…Œ์ŠคํŠธ๊ฐ€ ์ค‘๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. .net ํ‘œ์ค€ 2.0์œผ๋กœ๋งŒ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์‹œ๋„ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— 1.x์—์„œ ํšŒ๊ท€์ธ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@niemyjski ํ™•์ธ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด ์‹œ์ ์—์„œ ์ถฉ๋ถ„ํ•œ ์ •๋ณด์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹จ์ง€ ์•Œ๋ ค์ง„ ์‚ฌ์‹ค/๊ฒฝํ—˜์„ ์ •์ฐฐํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ๊ณ„์† ๊ณต๊ฐœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

CoreFx์˜ ์ˆ˜์ • ์‚ฌํ•ญ์€ PR์— ์žˆ์Šต๋‹ˆ๋‹ค: https://github.com/dotnet/corefx/pull/28375

๋„ค :)

๊ฐ์‚ฌ ํ•ด์š”
-๋ธ”๋ ˆ์ดํฌ ๋‹ˆ์—๋ฏธ์Šคํ‚ค

2018๋…„ 3์›” 22์ผ ๋ชฉ์š”์ผ ์˜คํ›„ 3์‹œ 57๋ถ„, Caesar Chen ์•Œ๋ฆผ @github.com
์ผ๋‹ค:

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๋กœ ์ „ํ™˜ํ•  ์ˆ˜ ์—†๋Š” ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?
๋” ์‰ฝ๊ฒŒ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ด ๋ฌธ์ œ๊ฐ€ ์—†์„๊นŒ์š”?

๊ฐ์‚ฌ ํ•ด์š”
-๋ธ”๋ ˆ์ดํฌ ๋‹ˆ์—๋ฏธ์Šคํ‚ค

2018๋…„ 3์›” 23์ผ ๊ธˆ์š”์ผ ์˜ค์ „ 7์‹œ 14๋ถ„, Blake Niemyjski [email protected]
์ผ๋‹ค:

๋„ค :)

๊ฐ์‚ฌ ํ•ด์š”
-๋ธ”๋ ˆ์ดํฌ ๋‹ˆ์—๋ฏธ์Šคํ‚ค

2018๋…„ 3์›” 22์ผ ๋ชฉ์š”์ผ ์˜คํ›„ 3์‹œ 57๋ถ„, Caesar Chen ์•Œ๋ฆผ @github.com
์ผ๋‹ค:

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 ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ?

๋„ค :)

๊ฐ์‚ฌ ํ•ด์š”
-๋ธ”๋ ˆ์ดํฌ ๋‹ˆ์—๋ฏธ์Šคํ‚ค

2018๋…„ 3์›” 23์ผ ๊ธˆ์š”์ผ ์˜ค์ „ 9์‹œ 22๋ถ„, Alexey Zimarev [email protected]
์ผ๋‹ค:

@niemyjski https://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 ์งˆ๋ฌธ์€ ํ•˜๋‚˜ _๋˜๋Š”_ ๋‹ค๋ฅธ ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. _yes_๋Š” ์‹ค์ œ๋กœ ์œ ํšจํ•œ ๋‹ต๋ณ€์ด ์•„๋‹™๋‹ˆ๋‹ค. :)

RestSharp๊ฐ€ HttpClient ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ธ ๊ฒฝ์šฐ - ์ €๋Š” ์ด์— ์ฐฌ์„ฑํ•˜์ง€๋งŒ ์ง€๋‚œ๋ฒˆ์—๋Š” RestClient์˜ ๋ชจ๋“  ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ผ์น˜์‹œํ‚ค๋Š” ๋ฐ ๋งŽ์€ ์ž‘์—…์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ, ํ›จ์”ฌ ๋” ์œ ์—ฐํ•˜๊ณ  ๋” ๋‚˜์€ ์„ฑ๋Šฅ๊ณผ ๋ชจ๋“  ๊ณณ์—์„œ ์ž‘๋™ํ•˜๋Š” ์ตœ์‹  API๋ฅผ ์ œ๊ณตํ•˜๋Š” HttpClient๋กœ ์ „ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ช‡ ๊ฐ€์ง€ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. :)

๋„ค, ์ž˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค๋งŒ ํ˜ผ์ž ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ํ•ด๋ดค๋Š”๋ฐ ์ผ์ด ๋„ˆ๋ฌด ๋งŽ์•˜์Šต๋‹ˆ๋‹ค. ์ฝœ๋ฐฑ์„ ํ—ˆ์šฉํ•˜๋Š” ๋น„๋™๊ธฐ ํ˜ธ์ถœ๋„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ContinueWith๋Š” ๊ดœ์ฐฎ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด 2.1์— ๋ณ‘ํ•ฉ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๋ฏธ๋ฆฌ ๋ณด๊ธฐ 2๋น„ํŠธ๋ฅผ ์ฐธ์กฐํ•˜๋Š” nightly๋ฅผ ๋ฐœํ–‰ํ•ด์•ผ ํ•˜๋ฉฐ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€๋ฅผ ์˜ค๋ž˜ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? < 2.1 ๋Ÿฐํƒ€์ž„/libs์— ๋Œ€ํ•ด ์šฐ๋ฆฌ๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•„๋ฌด ์ƒ๊ฐ์ด ์—†์Šต๋‹ˆ๋‹ค

ํ”„๋ฆฌ๋ฆด๋ฆฌ์ฆˆ๋ฅผ ์ฐธ์กฐ 2.1 ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋กœ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ๋จผ์ € ๋ฆด๋ฆฌ์Šค๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ๋˜์—ˆ๋‚˜์š”? 2.1 rtm ํŒจํ‚ค์ง€๋Š” nuget์— ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ 2.1์„ ์‚ฌ์šฉํ•ด๋ณด๊ณ  ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

@niemyjski 4์›” 20์ผ์˜ ์ œ ๋Œ“๊ธ€์€ ๋ฐ”๋ณด์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์•„๋ฌด๋ฐ๋„ ๊ฐ€๋ฆฌํ‚ฌ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” .NET Standard 2.0์œผ๋กœ ์ปดํŒŒ์ผ๋ฉ๋‹ˆ๋‹ค. ์ด ์˜ค๋ฅ˜๋Š” .NET Core 2.0 ๋Ÿฐํƒ€์ž„์˜ ๋ฒ„๊ทธ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋ฏ€๋กœ .NET Core 2.1๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๋Š” ์ฆ‰์‹œ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๋ฉด ์ž‘๋™์„ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ˜ผ๋ž€์„ ๋“œ๋ ค ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰