質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

3167閲覧

C#, HttpClientでTodo.lyにPostしたいです。

cancat

総合スコア313

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2016/12/08 09:19

こんにちは。
Windows10でWPFのアプリケーションを開発しています。
Visual Studio 2015 Communityを使っています。

###前提・実現したいこと
C#, HttpClientでTodo.lyにPostしたいです。

###試したこと
下記の通り。

###発生している問題・エラーメッセージ
{StatusCode: 500, ReasonPhrase: 'Internal Server Error', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
Cache-Control: private
Date: Thu, 08 Dec 2016 09:16:19 GMT
Server: Microsoft-IIS/8.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Content-Length: 3420
Content-Type: text/html; charset=utf-8
}}

###該当のソースコード

C#

1using System.Collections.Generic; 2using System.Net.Http; 3 4namespace Todoly { 5 public partial class Todoly { 6 public async void PostItems(string message) { 7 message = "カーテン。"; 8 9 if (NeedAuth()) { 10 var tokenResponse = await client.GetAsync(TokenUri); 11 } 12 13 var content = new FormUrlEncodedContent(new Dictionary<string, string> 14 { 15 { "Content", message } 16 }); 17 18 var response = await client.PostAsync(UriOfItems, content); 19 20 var resultString = await response.Content.ReadAsStringAsync(); 21

###補足情報(言語/FW/ツール等のバージョンなど)
Microsoft Visual Studio Community 2015
Version 14.0.25424.00 Update 3
Microsoft .NET Framework
Version 4.6.01038

インストールしているバージョン:Community

Visual C# 2015 00322-20000-00000-AA575
Microsoft Visual C# 2015

です。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ざっくり書きますが、エラーは無効なPOSTをしているからで、無効とは、POSTしたコンテンツのことをさしていると思います。
APIの仕様見るところだと、例えば

csharp

1public class TodoModelBase 2{ 3 public string Content { get; set; } 4}

っていうSend用のModel(クラス名適当です)があると仮定すれば、

charp

1var model = new { Content = "crate demo." }; 2var content = new StringContent(JsonConvert.SerializeObject(model), Encoding.UTF8, "application/json");

でしょうか。(1プロパティだけなのでTodoModelBaseをつくらずjsonを書けばよいってのはありますが、inputのmodelをjsonにかえるという汎用性を考えて作ってます)

ってかこのシリーズの投稿に連投で回答して感じていることで余計なお世話かとは思いますが、
もうちょっとプログラムというものを理解するための学習をした方が良いかと思います。なんのためにどのオブジェクトが必要かとか、使っているオブジェクトがどう動くかを理解せず、何かわからないものをつなげてるだけだと前に進まないと思います。これ系が初めてとか関係ないかと....スキル習得は必要でないのであればよいのですが。

それを理解していれば、Todolyなんて使ったことないしBasic認証なんて使った記憶すら残っていない私でも、APIの仕様とHTTPのPOSTをするってことはどうゆーことなのかという理解だけでさらっと作れてしまうので....そうなるとプログラミングをもっと楽しめるようになると思います。

投稿2016/12/08 10:24

BEACHSIDE

総合スコア294

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cancat

2016/12/08 15:10

ありがとうございます。 スキル習得はもちろんしたいです。 Todo.lyのAPIはもちろん見ています。 たとえばItemObject-Contentとあるときに、それもJSONにするためのクラスが必要なのだろうか? POSTのときにResponseで返ってくるような細かい設定はできないのだろうか? とか、山ほど疑問点はあり、なかなか解決できずにいます。 たとえば今回のコードだと、いきなりJsonConvert.SerializeObject(model), Encoding.UTF8, "application/json"などがでてきますが、このあたりをいきなり書くのは、まだむずかしそうです。 とはいえ、すこしずつ書けるようにはなっていると思いますので、もうすこしおつきあいいただければ幸いです。 HttpClientの使い方の入門サイトとかで、よいところがあればご紹介ください。
BEACHSIDE

2016/12/09 01:19

「いきなりJsonConvert.SerializeObject(model), Encoding.UTF8, "application/json"などがでてきますが、このあたりをいきなり書くのは...」とおっしゃってますが... たぶん難しく考えすぎで、 「Contentにjsonの文字列が必要だ(プログラミングの問題ではなく、POSTとTodoly側の都合なのでC#関係ない)」 →「json文字列を手で書くのめんどくさーいけど、classをjsonにすることはできる」 →「デシリアライズすればいいよね。とりあえずTodolyのAPI仕様見るのめんどくさいからUTF8にしときゃいいでしょ、ダメだったらその時なおす」 と論理的に考えて(論理的かどうかはさておき...w)書いてるだけなので、HttpClientがーとかC#でWebがーとかの話ではないです(あくまで私個人的な考え方です...)。C#やHttpClientはただの手段です。目的ありき手段を使うのに、目的が不明確なので手段として何していいか精査できていないってやつ。 HttpClientに入門するほどの内容ないです。MSDNを見ましょう。 ただ、それを見て理解するためC#に入門された方がよいと感じます。この部分や、やったことのない他の部分もサクッとできるようになる近道です(と思っています...)。 ということで、(私の個人的なおすすめとして) http://ufcpp.net/study/csharp/ でC#の基礎を学んでいただければと。ここのブログもそうですが、正しい情報(新しくなった情報がきっちり更新されている)がきっちりまとまっている、世界でみても最高級のサイトです(←あくまで私個人的な思いですよw)。 ググって適当なサイトを見ても、古い情報=正しくない情報なことも多いものを見て学んでも無駄です。ググってWebRequestの情報見つけてコピペでコード作ったなんかだと絶望的です。(私の社内だと「なんで紀元前のコード書いているの?理由は?妥当性は?」と言われます) ということでちょっと干渉しすぎましたね。失礼しました。ながーくなってしまいましたが楽しんでいただければと....。 (HttpClientですか....気が向いたら自分のブログに書きますね...)
cancat

2016/12/09 04:00

ありがとうございます。 未確認飛行は、よく参考にしています。 新しい書き方はとてもスマートになっているので、採り入れたいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問