@soris1989 כתב בבקשת POST בC# יוצרת שגיאה:
@עידו אתה יכול בקוד להשתמש בסיפריות מוכנות של Logging לתוך קובץ.
הקוד הבא מאפשר את קבלת המחרוזת של ה-curl:
static async Task UploadTextFileWithPost2() { var url = "https://www.call2all.co.il/ym/api/UploadTextFile"; try { var client = new HttpClient(); var obj = new { token = $"{Username}:{Password}", what = "ivr2:14/text_file.ini", contents = "Some test message" }; var json = JsonConvert.SerializeObject(obj); var content = new StringContent(json, Encoding.UTF8, "application/json"); // Generate cURL command string curlCommand = GenerateCurlCommand("POST", url, client, content); Console.WriteLine("Generated cURL:"); Console.WriteLine(curlCommand); var responseJ2 = await client.PostAsync(url, content); // בדיקת מצב התגובה if (responseJ2.IsSuccessStatusCode) { // קריאת התוכן של התגובה var responseContent2 = await responseJ2.Content.ReadAsStringAsync(); Console.WriteLine($"Response: {responseContent2}"); } else { Console.WriteLine($"Error: {responseJ2.StatusCode}"); return; } } catch (Exception ex) { Console.WriteLine($"Exception: {ex.Message}"); } await Task.Delay(1000); Console.WriteLine("Async work done!"); } static string GenerateCurlCommand(string method, string url, HttpClient client, HttpContent content) { StringBuilder sb = new StringBuilder(); sb.Append($"curl -X {method} "); // Add headers foreach (var header in client.DefaultRequestHeaders) { sb.Append($"-H \"{header.Key}: {string.Join("; ", header.Value)}\" "); } // Add content body if (content != null) { string body = content.ReadAsStringAsync().Result; sb.Append($"-d '{body}' "); } // Add URL sb.Append(url); return sb.ToString(); }
המתודה GenerateCurlCommand, פולטת לך string עם ה- curl, את ה-string הזה תדפיס בתוך קובץ log או משהו בסגנון. וזה לגבי בקשות שאתה מריץ מהקוד שלך.
לגבי בדיקת בקשות שנכנסות למערכת שלך, במידה ואתה כותב ב asp.net core, אז תיצור middleware באופן הבא:
using Microsoft.AspNetCore.Http; using System.Collections.Generic; using System.IO; using System.Threading.Tasks; using Microsoft.Extensions.Logging; public class RequestLoggingMiddleware { private readonly RequestDelegate _next; private readonly ILogger<RequestLoggingMiddleware> _logger; public RequestLoggingMiddleware(RequestDelegate next, ILogger<RequestLoggingMiddleware> logger) { _next = next; _logger = logger; } public async Task InvokeAsync(HttpContext httpContext) { // Log request method, URL, and headers _logger.LogInformation("Request Method: {Method}, Request URL: {Url}", httpContext.Request.Method, httpContext.Request.Path); // Log all headers foreach (var header in httpContext.Request.Headers) { _logger.LogInformation("Header: {Header}: {Value}", header.Key, header.Value); } // Call the next middleware in the pipeline await _next(httpContext); } }
בקוד של asp.net (לא CORE), תשים ב-global.asax:
using System; using System.Web; public class Global : HttpApplication { protected void Application_BeginRequest(object sender, EventArgs e) { HttpContext context = HttpContext.Current; // Log request method and URL var method = context.Request.HttpMethod; var url = context.Request.Url.ToString(); // Log all headers foreach (var header in context.Request.Headers.AllKeys) { var headerValue = context.Request.Headers[header]; System.Diagnostics.Debug.WriteLine($"Header: {header}: {headerValue}"); } // Log method and URL System.Diagnostics.Debug.WriteLine($"Request Method: {method}, Request URL: {url}"); } }
בשרת שלי אין net (סייבר פאנל מבוסס לינוקס)