タグ付けされた質問 「asp.net-web-api」

ASP.NET Web APIは、ブラウザーやモバイルデバイスなどのクライアント用のHTTPサービスを構築するためのフレームワークです。これは、Microsoft .NET Frameworkに基づいており、RESTfulサービスを構築するための理想的な選択肢です。

8
HttpResponseMessageオブジェクトにコンテンツを入れますか?
数か月前、マイクロソフトはHttpResponseMessageクラスを変更することを決定しました。以前は、単純にデータ型をコンストラクターに渡して、そのデータを含むメッセージを返すことができましたが、それ以上はできなくなりました。 次に、Contentプロパティを使用してメッセージのコンテンツを設定する必要があります。問題は、タイプがHttpContentであり、文字列をHttpContentなどに変換する方法が見つからないようです。 誰もがこの問題に対処する方法を知っていますか?どうもありがとう。

5
C#MVC4 WebAPIアプリのすべての例外をグローバルに記録するにはどうすればよいですか?
バックグラウンド クライアント用のAPIサービスレイヤーを開発していて、すべてのエラーをグローバルにキャッチしてログに記録するように依頼されました。 したがって、不明なエンドポイント(またはアクション)のようなものは、ELMAHを使用するか、次のようなものをに追加することによって簡単に処理されGlobal.asaxます。 protected void Application_Error() { Exception unhandledException = Server.GetLastError(); //do more stuff } 。。ルーティングに関連しない.unhandledエラーはログに記録されません。例えば: public class ReportController : ApiController { public int test() { var foo = Convert.ToInt32("a");//Will throw error but isn't logged!! return foo; } } また、[HandleError]このフィルターを登録して、属性をグローバルに設定してみました。 filters.Add(new HandleErrorAttribute()); ただし、すべてのエラーがログに記録されるわけではありません。 問題/質問 /test上記の呼び出しで生成されたようなエラーをインターセプトして、ログに記録するにはどうすればよいですか?この答えは明白であるように思われますが、私はこれまで考えられるすべてのことを試みました。 理想的には、要求しているユーザーのIPアドレス、日付、時刻など、いくつかをエラーログに追加したいと思います。また、エラーが発生したときにサポートスタッフに自動的にメールを送信できるようにしたいと考えています。エラーが発生したときにこれらのエラーをインターセプトできる場合にのみ、これらすべてを実行できます。 解決しました! その答えを受け入れたDarin Dimitrovのおかげで、これを理解できました。 WebAPIは、通常のMVCコントローラーと同じ方法でエラーを処理しません。 …


11
プロパティがWeb APIでシリアル化されないようにする
MVC 4 Web APIとasp.net Webフォーム4.0を使用してREST APIを構築しています。それは素晴らしい働きをしています: [HttpGet] public HttpResponseMessage Me(string hash) { HttpResponseMessage httpResponseMessage; List<Something> somethings = ... httpResponseMessage = Request.CreateResponse(HttpStatusCode.OK, new { result = true, somethings = somethings }); return httpResponseMessage; } 次に、いくつかのプロパティがシリアル化されないようにする必要があります。リストでいくつかのLINQを使用して必要なプロパティのみを取得できることはわかっています。通常、これは良いアプローチですが、現在のシナリオではsomethingオブジェクトが複雑すぎて、さまざまなメソッドでさまざまなプロパティのセットが必要なので、実行時に、無視する各プロパティをマークするのが簡単です。 それを行う方法はありますか?

6
ASP.NET WebAPIでファイル(FileContentResult)を返す方法
通常のMVCコントローラーでは、pdfをで出力できますFileContentResult。 public FileContentResult Test(TestViewModel vm) { var stream = new MemoryStream(); //... add content to the stream. return File(stream.GetBuffer(), "application/pdf", "test.pdf"); } しかし、どうすればそれをに変更できApiControllerますか? [HttpPost] public IHttpActionResult Test(TestViewModel vm) { //... return Ok(pdfOutput); } これが私が試したものですが、うまくいかないようです。 [HttpGet] public IHttpActionResult Test() { var stream = new MemoryStream(); //... var content = new StreamContent(stream); …

9
HttpResponseExceptionをスローするか、Request.CreateErrorResponseを返しますか?
ASP.NET Web APIでの例外処理の記事を確認した後、例外をスローするタイミングとエラーレスポンスを返すタイミングについて少し混乱しています。メソッドがドメイン固有のモデルではなくHttpResponseMessage...を返すときに応答を変更できるかどうかも疑問に思っています。 だから、ここで要約すると、私の質問の後にケース番号付きのコードが続きます: ご質問 ケース#1に関する質問 HttpResponseMessageメッセージをカスタマイズできるように、具体的なドメインモデルではなく常に使用する必要がありますか? 具体的なドメインモデルを返す場合、メッセージをカスタマイズできますか? ケース#2、3、4に関する質問 例外をスローするか、エラー応答を返す必要がありますか?答えが「依存する」である場合、どちらを使用するかについて状況/例を挙げられますか。 投げHttpResponseExceptionvs はどう違いRequest.CreateErrorResponseますか?クライアントへの出力は同じようです... HttpErrorエラーに応答メッセージを「ラップ」するために常に使用する必要がありますか(例外がスローされるか、エラー応答が返されるか)。 ケースサンプル // CASE #1 public Customer Get(string id) { var customer = _customerService.GetById(id); if (customer == null) { var notFoundResponse = new HttpResponseMessage(HttpStatusCode.NotFound); throw new HttpResponseException(notFoundResponse); } //var response = Request.CreateResponse(HttpStatusCode.OK, customer); //response.Content.Headers.Expires = new DateTimeOffset(DateTime.Now.AddSeconds(300)); return …

9
IIS ExpressではなくIIS7でのWebApiの{“メッセージ”:“エラーが発生しました”}
私はASP.NET MVC 4 WebApiを使用しており、IIS Expressのローカルコンピューターで実行することで非常に楽しんでいます。IIS Expressを構成してリモートマシンにもサービスを提供したので、社内の他のユーザーが自分のコンピューターをWebサーバーとして使用しています。 これが最適ではないソリューションであると判断した後、.NET 4.5をインストールした後、リモートサーバーにWebApiを配置することにしました。フィドラーを使用してPOSTをローカルマシンのコントローラーに送信すると、正しい応答が返されますが、ドメインをIIS7を実行しているWebサーバーに変更すると、同じPOSTが暗号を返します {"メッセージ": "エラーが発生しました"} メッセージ。誰が何が起こっているのか考えていますか?

16
ASP.NET Web APIの複数のGETメソッドを持つ単一のコントローラー
Web APIには、同様の構造のクラスがありました。 public class SomeController : ApiController { [WebGet(UriTemplate = "{itemSource}/Items")] public SomeValue GetItems(CustomParam parameter) { ... } [WebGet(UriTemplate = "{itemSource}/Items/{parent}")] public SomeValue GetChildItems(CustomParam parameter, SomeObject parent) { ... } } 個々のメソッドをマッピングできるため、適切な場所で適切なリクエストを取得することは非常に簡単でした。GETメソッドが1つだけで、Objectパラメーターも持つ同様のクラスの場合、を正常に使用しましたIActionValueBinder。ただし、上記の場合、次のエラーが発生します。 Multiple actions were found that match the request: SomeValue GetItems(CustomParam parameter) on type SomeType SomeValue GetChildItems(CustomParam parameter, SomeObject …

7
HttpClientにリクエストと一緒に認証情報を渡す方法は?
Windowsサービスと通信する(IISでホストされている)Webアプリケーションがあります。WindowsサービスはASP.Net MVC Web API(自己ホスト型)を使用しているため、JSONを使用してhttp経由で通信できます。Webアプリケーションは偽装を行うように構成されています。つまり、Webアプリケーションへの要求を行うユーザーは、Webアプリケーションがサービスへの要求を行うために使用するユーザーである必要があります。構造は次のようになります。 (赤で強調表示されているユーザーは、以下の例で参照されているユーザーです。) Webアプリケーションは、HttpClient次を使用してWindowsサービスにリクエストを送信します。 var httpClient = new HttpClient(new HttpClientHandler() { UseDefaultCredentials = true }); httpClient.GetStringAsync("http://localhost/some/endpoint/"); これにより、Windowsサービスへの要求が行われますが、資格情報は正しく渡されません(サービスはユーザーをとして報告しますIIS APPPOOL\ASP.NET 4.0)。これは私が起こしたいことではありません。 上記のコードを変更してを使用するWebClientと、ユーザーの認証情報が正しく渡されます。 WebClient c = new WebClient { UseDefaultCredentials = true }; c.DownloadStringAsync(new Uri("http://localhost/some/endpoint/")); 上記のコードでは、サービスはユーザーをWebアプリケーションにリクエストを行ったユーザーとして報告します。 HttpClient資格情報を正しく渡さない原因となっている実装で何が問題になっていますか(またはのバグHttpClientですか?) を使用したいのHttpClientは、Tasksでうまく機能する非同期APIがあるのに対して、WebClient's asyc APIはイベントで処理する必要があるからです。

7
WebAPIクライアントで呼び出しごとに新しいHttpClientを作成するオーバーヘッドは何ですか?
HttpClientWebAPIクライアントの存続期間はどうあるべきですか?複数の呼び出しに対しての インスタンスを1つ持つ方が良いHttpClientですか? HttpClient以下の例のように、リクエストごとに作成および破棄するオーバーヘッドは何ですか(http://www.asp.net/web-api/overview/web-api-clients/calling-a-web-api-from-から取得)a-net-client): using (var client = new HttpClient()) { client.BaseAddress = new Uri("http://localhost:9000/"); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); // New code: HttpResponseMessage response = await client.GetAsync("api/products/1"); if (response.IsSuccessStatusCode) { Product product = await response.Content.ReadAsAsync<Product>(); Console.WriteLine("{0}\t${1}\t{2}", product.Name, product.Price, product.Category); } }

4
ASP.NET Coreでのトークンベースの認証
ASP.NET Coreアプリケーションを使用しています。トークンベースの認証を実装しようとしていますが、新しいセキュリティシステムを使用する方法がわかりません。私は例を試してみましたが、彼らは私をあまり助けませんでした、彼らはクッキー認証または外部認証(GitHub、Microsoft、Twitter)のどちらかを使用しています。 私のシナリオは何ですか:angularjsアプリケーションは、/tokenユーザー名とパスワードを渡すURLを要求する必要があります。WebApiはユーザーを承認しaccess_token、次のリクエストでangularjsアプリが使用するものを返す必要があります。 ASP.NETの現在のバージョン-ASP.NET Web API 2、Owin、およびIdentityを使用したトークンベースの認証に必要なものを正確に実装することに関する優れた記事を見つけました。しかし、ASP.NET Coreで同じことをする方法は私には明らかではありません。 私の質問は、ASP.NET Core WebApiアプリケーションをトークンベースの認証で動作するように構成する方法ですか。

30
CodeDomプロバイダータイプ“ Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider”が見つかりませんでした
これはVS2015を使用したWebApiプロジェクトです。 再現手順: 空のWebApiプロジェクトを作成する ビルド出力パスを「bin \」から「bin \ Debug \」に変更します 走る ビルド出力パスを「bin \」から「bin \ Debug \」に変更するまで、すべてが完全に機能しています。実際、「bin \」以外の出力パスは機能しません。 もう1つ追加すべきことは、ビルドを「bin \」に残しておけば、どこにでも別の出力パスを設定できることです。 これを解決するためのソリューションの提供を手伝ってください。実際の展開では問題が発生すると思います。

3
HttpClientへのHttpヘッダーの追加
すべて: Webサービスにリクエストを送信する前に、HttpClientにhttpヘッダーを追加する必要があります。(HttpClientですべての将来の要求とは対照的に)個々の要求に対してどうすればよいですか?これが可能かどうかはわかりません。 var client = new HttpClient(); var task = client.GetAsync("http://www.someURI.com") .ContinueWith((taskwithmsg) => { var response = taskwithmsg.Result; var jsonTask = response.Content.ReadAsAsync<JsonObject>(); jsonTask.Wait(); var jsonObject = jsonTask.Result; }); task.Wait();


13
HttpClientを使用してHttps呼び出しを行う
私はHttpClientC#を使用してWebApi呼び出しを行うために使用しています。に比べてすっきりと速い方法のようWebClientです。しかし、Https電話をしている間に立ち往生しています。 Https呼び出しを行うために以下のコードをどのように作成できますか? HttpClient httpClient = new HttpClient(); httpClient.BaseAddress = new Uri("https://foobar.com/"); httpClient.DefaultRequestHeaders.Accept.Clear(); httpClient.DefaultRequestHeaders.Accept.Add( new MediaTypeWithQualityHeaderValue("application/xml")); var task = httpClient.PostAsXmlAsync<DeviceRequest>( "api/SaveData", request); 編集1: 上記のコードはhttp呼び出しを行うために正常に動作します。しかし、スキームをhttpsに変更すると機能しません。取得したエラーは次のとおりです。 基になる接続が閉じられました:SSL / TLSセキュアチャネルの信頼関係を確立できませんでした。 編集2: スキームをhttpsに変更するには、ステップ1を実行します。 C#リクエストと共に証明書と公開鍵/秘密鍵を提供するにはどうすればよいですか。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.