คำถามติดแท็ก asp.net-web-api

ASP.NET Web API เป็นเฟรมเวิร์กสำหรับสร้างบริการ HTTP สำหรับลูกค้าเช่นเบราว์เซอร์และอุปกรณ์มือถือ มันขึ้นอยู่กับ Microsoft .NET Framework และเป็นตัวเลือกที่เหมาะสำหรับการสร้างบริการ RESTful

8
นำเนื้อหาในวัตถุ HttpResponseMessage หรือไม่
เมื่อหลายเดือนก่อน Microsoft ตัดสินใจเปลี่ยนคลาส HttpResponseMessage ก่อนหน้านี้คุณสามารถส่งประเภทข้อมูลไปยังตัวสร้างจากนั้นส่งคืนข้อความด้วยข้อมูลนั้น แต่ไม่ใช่อีกต่อไป ตอนนี้คุณต้องใช้คุณสมบัติเนื้อหาเพื่อตั้งค่าเนื้อหาของข้อความ ปัญหาคือมันเป็นประเภท HttpContent และฉันไม่สามารถหาวิธีแปลงสตริงได้เป็น HttpContent ไม่มีใครรู้วิธีจัดการกับปัญหานี้หรือไม่? ขอบคุณมาก.

5
ฉันจะบันทึกข้อยกเว้นทั้งหมดแบบโกลบอลสำหรับแอป C # MVC4 WebAPI ได้อย่างไร
พื้นหลัง ฉันกำลังพัฒนา API Service Layer สำหรับลูกค้าและฉันถูกขอให้ตรวจจับและบันทึกข้อผิดพลาดทั้งหมดทั่วโลก ดังนั้นในขณะที่บางสิ่งเช่นปลายทางที่ไม่รู้จัก (หรือการกระทำ) สามารถจัดการได้อย่างง่ายดายโดยใช้ ELMAH หรือโดยการเพิ่มสิ่งนี้ในGlobal.asax: protected void Application_Error() { Exception unhandledException = Server.GetLastError(); //do more stuff } . . ข้อผิดพลาดที่ไม่ได้จัดการซึ่งไม่เกี่ยวข้องกับการกำหนดเส้นทางจะไม่ถูกบันทึก ตัวอย่างเช่น: public class ReportController : ApiController { public int test() { var foo = Convert.ToInt32("a");//Will throw error but isn't logged!! return foo; } } …

5
.NET HttpClient วิธีการโพสต์ค่าสตริง?
ฉันจะสร้างโดยใช้ C # และ HttpClient ตามคำขอ POST ต่อไปนี้ได้อย่างไร: ฉันต้องการคำขอดังกล่าวสำหรับบริการ WEB API ของฉัน: [ActionName("exist")] [HttpPost] public bool CheckIfUserExist([FromBody] string login) { return _membershipProvider.CheckIfExist(login); }

11
ป้องกันคุณสมบัติไม่ให้ต่อเนื่องใน web API
ฉันใช้ MVC 4 web API และ asp.net เว็บฟอร์ม 4.0 เพื่อสร้าง 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
วิธีคืนไฟล์ (FileContentResult) ใน ASP.NET WebAPI
ในการควบคุม 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(); //... …

9
โยน HttpResponseException หรือส่งคืน Request สร้าง CreateErrorResponse ไหม?
หลังจากตรวจสอบข้อยกเว้นการจัดการบทความใน ASP.NET Web APIฉันสับสนนิดหน่อยว่าเมื่อใดที่จะโยนข้อยกเว้น vs ส่งคืนการตอบกลับข้อผิดพลาด ฉันยังสงสัยว่ามันเป็นไปได้ที่จะปรับเปลี่ยนการตอบสนองเมื่อวิธีการของคุณส่งคืนรูปแบบเฉพาะโดเมนแทนHttpResponseMessage... ดังนั้นการสรุปที่นี่คำถามของฉันตามด้วยรหัสบางกรณี #s: คำถาม คำถามเกี่ยวกับ Case # 1 ฉันควรใช้HttpResponseMessageแทนโมเดลโดเมนที่เป็นรูปธรรมเสมอเพื่อให้สามารถปรับแต่งข้อความได้หรือไม่ สามารถปรับแต่งข้อความได้หรือไม่หากคุณส่งคืนโมเดลโดเมนที่เป็นรูปธรรม? คำถามเกี่ยวกับ Case # 2,3,4 ฉันควรจะโยนข้อยกเว้นหรือตอบกลับข้อผิดพลาด? หากคำตอบคือ "มันขึ้นอยู่กับ" คุณสามารถให้สถานการณ์ / ตัวอย่างเมื่อใดที่จะใช้หนึ่งเทียบกับอีก ความแตกต่างระหว่างการขว้างปาคืออะไรHttpResponseExceptionVS Request.CreateErrorResponse? ผลลัพธ์ไปยังลูกค้าดูเหมือนกัน ... ฉันควรจะใช้HttpErrorเพื่อ "ห่อ" ข้อความตอบสนองในข้อผิดพลาด (ไม่ว่าจะเป็นข้อยกเว้นโยนหรือการตอบกลับข้อผิดพลาด)? ตัวอย่างกรณี // CASE #1 public Customer Get(string id) { var customer = _customerService.GetById(id); if (customer == …

9
{“ ข้อความ” ของ WebApi:“ เกิดข้อผิดพลาด”} บน IIS7 ไม่ใช่ใน IIS Express
ฉันทำงานกับ ASP.NET MVC 4 WebApi และสนุกไปกับมันที่ใช้งานบนคอมพิวเตอร์ในท้องถิ่นของฉันบน IIS Express ฉันได้กำหนดค่า IIS Express เพื่อให้บริการเครื่องระยะไกลด้วยและอื่น ๆ ใน บริษัท ของฉันกำลังใช้คอมพิวเตอร์เป็นเว็บเซิร์ฟเวอร์ของเรา หลังจากตัดสินใจว่านี่เป็นวิธีการแก้ปัญหาที่ดีที่สุดเราตัดสินใจวาง WebApi บนเซิร์ฟเวอร์ระยะไกลหลังจากติดตั้ง. NET 4.5 เมื่อฉันใช้พู้ทำเล่นและส่ง POST ไปยังตัวควบคุมบนเครื่องท้องถิ่นของฉันมันจะส่งคืนการตอบสนองที่ถูกต้อง แต่เมื่อฉันเปลี่ยนโดเมนเป็นเว็บเซิร์ฟเวอร์ที่รัน IIS7 POST เดียวกันจะส่งกลับเป็นความลับ {"message": "เกิดข้อผิดพลาด"} ข่าวสาร มีใครมีความคิดว่าจะเกิดอะไรขึ้น?

16
ตัวควบคุมเดียวที่มีวิธีการหลาย GET ใน ASP.NET Web API
ใน 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วิธี แต่ยังมีพารามิเตอร์ที่ผมใช้ประสบความสำเร็จObject IActionValueBinderอย่างไรก็ตามในกรณีที่อธิบายไว้ข้างต้นฉันได้รับข้อผิดพลาดต่อไปนี้: Multiple actions were found that match the request: SomeValue GetItems(CustomParam parameter) on type …

7
จะทำให้ HttpClient ส่งผ่านข้อมูลประจำตัวพร้อมกับคำขอได้อย่างไร
ฉันมีเว็บแอปพลิเคชั่น (โฮสต์ใน IIS) ที่พูดคุยกับบริการของ Windows บริการ Windows กำลังใช้ ASP.Net MVC Web API (โฮสต์ด้วยตนเอง) และสามารถสื่อสารกับผ่าน http โดยใช้ JSON แอปพลิเคชันเว็บได้รับการกำหนดค่าให้ทำการแอบอ้างเป็นแนวคิดที่ว่าผู้ใช้ที่ทำการร้องขอไปยังเว็บแอปพลิเคชันควรเป็นผู้ใช้ที่เว็บแอปพลิเคชันใช้ในการร้องขอบริการ โครงสร้างมีลักษณะดังนี้: (ผู้ใช้ที่เน้นด้วยสีแดงคือผู้ใช้ที่ถูกอ้างถึงในตัวอย่างด้านล่าง) เว็บแอปพลิเคชันส่งคำขอไปยังบริการ Windows โดยใช้HttpClient: 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 …

7
ค่าใช้จ่ายในการสร้าง HttpClient ใหม่ต่อการโทรหนึ่งครั้งในไคลเอนต์ WebAPI คืออะไร
สิ่งที่ควรเป็นHttpClientอายุการใช้งานของไคลเอนต์ WebAPI มันจะดีกว่าถ้ามีอินสแตนซ์หนึ่ง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 ฉันกำลังพยายามใช้การรับรองความถูกต้องโดยใช้ Token แต่ไม่สามารถหาวิธีใช้ระบบรักษาความปลอดภัยใหม่สำหรับกรณีของฉันได้ ฉันดูตัวอย่างแล้วแต่พวกเขาก็ไม่ได้ช่วยอะไรมากพวกเขาใช้การตรวจสอบความถูกต้องคุกกี้หรือการตรวจสอบภายนอก (GitHub, Microsoft, Twitter) สถานการณ์ของฉันคืออะไร: แอปพลิเคชัน angularjs ควรขอ/tokenชื่อผู้ใช้และรหัสผ่าน URL ที่ผ่าน WebApi ควรอนุญาตผู้ใช้และส่งคืนaccess_tokenซึ่งแอป angularjs จะใช้ในคำขอต่อไปนี้ ฉันได้พบบทความที่ยอดเยี่ยมเกี่ยวกับการใช้สิ่งที่ฉันต้องการใน ASP.NET - Token Based Authentication โดยใช้ ASP.NET Web API 2, Owin และ Identityรุ่นปัจจุบัน แต่ไม่ชัดเจนสำหรับฉันว่าจะทำสิ่งเดียวกันใน ASP.NET Core ได้อย่างไร คำถามของฉันคือ: วิธีการกำหนดค่าแอปพลิเคชัน ASP.NET Core WebApi ให้ทำงานกับการตรวจสอบความถูกต้องด้วยโทเค็น

30
ประเภทผู้ให้บริการ CodeDom“ Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider” ไม่สามารถระบุตำแหน่งได้
เป็นโครงการ WebApi ที่ใช้ VS2015 ขั้นตอนในการทำซ้ำ: สร้างโครงการ WebApi ที่ว่างเปล่า เปลี่ยนเส้นทางสร้างผลลัพธ์จาก "bin \" เป็น "bin \ Debug \" วิ่ง ทุกอย่างทำงานได้อย่างสมบูรณ์จนกว่าฉันจะเปลี่ยนเส้นทางสร้างผลลัพธ์จาก "bin \" เป็น "bin \ Debug \" อันที่จริงแล้วเส้นทางออกอื่น ๆ ที่ไม่ใช่ "bin \" จะไม่ทำงาน สิ่งหนึ่งที่เพิ่มเติมเล็กน้อยคือการมีเส้นทางออกไปยังที่อื่นจะทำงานได้ตราบใดที่ฉันออกจากการสร้างใน "bin \" โปรดช่วยเสนอวิธีแก้ปัญหานี้ ฉันเดาว่าจะมีปัญหาเรื่องการใช้งานจริง

3
เพิ่ม Http Headers ให้กับ HttpClient
ทั้งหมด: ฉันต้องเพิ่มส่วนหัว http ไปยัง HttpClient ก่อนที่จะส่งคำขอไปยังบริการเว็บ ฉันจะทำเช่นนั้นสำหรับคำขอส่วนบุคคล (ตรงข้ามกับ 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
โทร Https โดยใช้ HttpClient
ฉันใช้HttpClientสำหรับการโทรผ่าน WebApi ด้วย C # 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 คือ: ขั้นตอนที่หนึ่ง ฉันจะจัดหาใบรับรอง & คีย์สาธารณะ / …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.