C# Post yaparken istenilen değeri göndermiyor

Katılım
30 Ocak 2019
Mesajlar
21.093
Makaleler
9
Çözümler
222
Daha fazla  
Cinsiyet
Erkek
C#:
        static readonly HttpClient client = new HttpClient();
        public static string path = @"C:\Users\***\Downloads\steam.jpg";
        const string api = "api/upload/";
        public static async Task<bool> Upload()
        {

            using MultipartFormDataContent multipartContent = new();
            var imageContent = new StreamContent(File.OpenRead(path));
            imageContent.Headers.ContentType = MediaTypeHeaderValue.Parse(MediaTypeNames.Image.Jpeg);
            StringContent str = new StringContent("type".ToString());
            multipartContent.Add(str, "test");
            multipartContent.Add(imageContent, "file", Path.GetFileName(path));
            using var response = await client.PostAsync(api, multipartContent);
            string message = await response.Content.ReadAsStringAsync();
            MessageBox.Show(message);
            return true;
        }


PHP:
            if (isset($_FILES["file"])  && isset($_POST["type"])){
                $type = $_POST["type"];
                $file = $_FILES["file"];
                var_dump($type);
                var_dump($file);
            }

Bu iki kodu kullanarak C#'dan veri göndermeye çalışıyorum. Eğer "isset($_POST["type"]" kısmını kaldırırsam sıkıntı çözülüyor. Ancak ben "type"ın "test" olduğunu belirttim kodda. Neden veri gelmiyor?

@Eray T Fikrin var mı?
 
PHP denetleme şekliniz yanlış. Düzeltmeniz lazım.

Ek olarak bu yapı yanlış.
Bunlarda sıkıntı yok. Orayı ismim gözükmesin diye yıldızladım.

PHP kodu böyle orayı da çok uzun olduğu için ve güvenlik amacıyla tıraşladım. C# kodunda yani sıkıntı.

Kod:
if($_SERVER['REQUEST_METHOD'] == "POST") {          
        if (isset($_FILES["file"])  && isset($_POST["type"])){
                $type = $_POST["type"];
                if(isset($type)){
                    $uploadresult = uploadImage(1, $type, $_FILES["file"]);
                    if($uploadresult){
                        JsonBuild(200, TRUE, "Başarıyla yüklendi!");
                    }
                    else{
                        JsonBuild(400, TRUE, "Dosya yüklenemedi!");
                    }
                }
                else{
                    echo $type;
                }
                }

POSTMAN'den sıkıntısız bir şekilde gönderebiliyorum.

1679064922830.png
 
Kod:
        public static async Task<bool> Upload(string path, string type){

                using (var multipartFormDataContent = new MultipartFormDataContent())
                {
                    var values = new[]
                    {
                        new KeyValuePair<string, string>("type", type),

                    };

                    foreach (var keyValuePair in values)
                    {
                        multipartFormDataContent.Add(new StringContent(keyValuePair.Value),
                            String.Format("\"{0}\"", keyValuePair.Key));
                    }
                    var imageContent = new StreamContent(File.OpenRead(path));
                    imageContent.Headers.ContentType = MediaTypeHeaderValue.Parse(MediaTypeNames.Image.Jpeg);
                    multipartFormDataContent.Add(imageContent, "file", Path.GetFileName(path));

                    var result = client.PostAsync(api, multipartFormDataContent).Result;
                    await result.Content.ReadAsStringAsync();
                    return true;
                }
            }

Bu şekilde yapınca oldu. Kaç defa Dictionary denedim olmamıştı böyle yapınca oldu niyeyse.

Bu kısımı değişitirmeniz lazım.

Ek olarak SERVER REQUST olarak ayarlamayın.

PHP:
if ($_POST){
  
}

Bu şekilde yapmanız yeterli.
Fark ediyor mu ki?

Son olarak bu kod SQL Injection yer. Haberiniz olsun.
Hem JWT hem Token kullanıyorum. Güvenliğe uğraşmasam program bitmişti şimdiye zaten. :d Üstte token ve JWT doğrulmasını yaptıktan sonra izin veriyor. Kodun küçük bir kısmıyla uğraştığım için sadece okunabilir kısmını attım.
 
Öyle yapınca olması normal. İlk istekte 0 veya 1 değeri gönderiyor denetim için. 2. gönderdiğiniz değer ise istediğiniz işlem.

Fark etmiyor. Sadece POST olduğu zaman kodlar devreye giriyor. POST olmadığı sürece devreye girmiyor.
 

Geri
Yukarı