কীভাবে WebApi এ শিরোনামের মান যুক্ত করা যায়


103

আমাকে ওয়েবএপিআইতে একটি পোস্টের পদ্ধতি তৈরি করতে হবে যাতে আমি অ্যাপ্লিকেশন থেকে ওয়েবএপিপি পদ্ধতিতে ডেটা প্রেরণ করতে পারি। আমি শিরোনাম মান পেতে সক্ষম নই।

এখানে আমি অ্যাপ্লিকেশনটিতে শিরোনাম মান যুক্ত করেছি:

 using (var client = new WebClient())
        {
            // Set the header so it knows we are sending JSON.
            client.Headers[HttpRequestHeader.ContentType] = "application/json";

            client.Headers.Add("Custom", "sample");
            // Make the request
            var response = client.UploadString(url, jsonObj);
        }

ওয়েবএপি পোস্ট পদ্ধতি অনুসরণ করে:

 public string Postsam([FromBody]object jsonData)
    {
        HttpRequestMessage re = new HttpRequestMessage();
        var headers = re.Headers;

        if (headers.Contains("Custom"))
        {
            string token = headers.GetValues("Custom").First();
        }
    }

শিরোনামের মান পাওয়ার সঠিক পদ্ধতি কী?

ধন্যবাদ

উত্তর:


192

ওয়েব এপিআই সাইডে, নতুন এইচটিটিপিআরকুয়েস্টমেসেজ তৈরির পরিবর্তে অনুরোধ অনুরোধটি ব্যবহার করুন

     var re = Request;
    var headers = re.Headers;

    if (headers.Contains("Custom"))
    {
        string token = headers.GetValues("Custom").First();
    }

    return null;

আউটপুট -

এখানে চিত্র বর্ণনা লিখুন


আপনি ব্যবহার করতে পারবেন না string token = headers.GetValues("Custom").FirstOrDefault();? সম্পাদনা: সবেমাত্র লক্ষ্য করেছেন যে আপনি আসল কিউস শৈলীর সাথে মেলে।
আইডানপওয়ার্ড

আমার নিজের প্রশ্ন উত্তর: জি, না দি headers.GetValues("somethingNotFound")একটি ছোঁড়ার InvalidOperationException
আইডানপওয়ার্ড

আমি কি beforeSendশিরোনামটি প্রেরণে JQuery আজাক্স ব্যবহার করব ?
সি 8

পারফেক্ট ... আমি এটি ব্যবহার করেছি beforeSendএবং এটি কাজ করে। দুর্দান্ত :) +1
সি 8

রিকোয়েস্ট ভেরিয়েবলের প্রকারটি কী এবং আমি কন্ট্রোলার পদ্ধতিতে এটি অ্যাক্সেস করতে পারি? আমি ওয়েব এপিআই ব্যবহার করছি 2 আমার কোন নামের স্থানটি আমদানি করতে হবে?
লোহিয়াহারুল

22

ধরুন আমাদের কাছে একটি এপিআই কন্ট্রোলার প্রোডাক্টস কনট্রোলার রয়েছে: এপিআইকন্ট্রোলার

একটি গেট ফাংশন রয়েছে যা কিছু মান দেয় এবং কিছু ইনপুট শিরোনাম প্রত্যাশা করে (উদাহরণস্বরূপ, ব্যবহারকারী নাম এবং পাসওয়ার্ড)

[HttpGet]
public IHttpActionResult GetProduct(int id)
{
    System.Net.Http.Headers.HttpRequestHeaders headers = this.Request.Headers;
    string token = string.Empty;
    string pwd = string.Empty;
    if (headers.Contains("username"))
    {
        token = headers.GetValues("username").First();
    }
    if (headers.Contains("password"))
    {
        pwd = headers.GetValues("password").First();
    }
    //code to authenticate and return some thing
    if (!Authenticated(token, pwd)
        return Unauthorized();
    var product = products.FirstOrDefault((p) => p.Id == id);
    if (product == null)
    {
        return NotFound();
    }
    return Ok(product);
}

এখন আমরা JQuery ব্যবহার করে পৃষ্ঠা থেকে অনুরোধটি পাঠাতে পারি:

$.ajax({
    url: 'api/products/10',
    type: 'GET',
    headers: { 'username': 'test','password':'123' },
    success: function (data) {
        alert(data);
    },
    failure: function (result) {
        alert('Error: ' + result);
    }
});

আশা করি এটি কাউকে সহায়তা করবে ...


9

ট্রাইগেটভ্যালুস পদ্ধতিটি ব্যবহার করার অন্য একটি উপায়।

public string Postsam([FromBody]object jsonData)
{
    IEnumerable<string> headerValues;

    if (Request.Headers.TryGetValues("Custom", out headerValues))
    {
        string token = headerValues.First();
    }
}   

6

নেট কোর জন্য:

string Token = Request.Headers["Custom"];

বা

var re = Request;
var headers = re.Headers;
string token = string.Empty;
StringValues x = default(StringValues);
if (headers.ContainsKey("Custom"))
{
   var m = headers.TryGetValue("Custom", out x);
}

6

মডেল বাইন্ডিংয়ের জন্য কেউ যদি এএসপি.এনইটি কোর ব্যবহার করছে,

https://docs.microsoft.com/en-us/aspnet/core/mvc/models/model-binding

[ফ্রমহিডার] বৈশিষ্ট্যটি ব্যবহার করে শিরোনামের থেকে মানগুলি পুনরুদ্ধার করার পক্ষে তৈরি করা আছে

public string Test([FromHeader]string Host, [FromHeader]string Content-Type )
{
     return $"Host: {Host} Content-Type: {Content-Type}";
}

4
Content-Typeকোনও বৈধ সি # সনাক্তকারী নয়
thepirat000

6

যেমন কেউ ইতিমধ্যে এটি কীভাবে করবেন তা নির্দেশ করে দিয়েছিল। নেট কোর, যদি আপনার শিরোনামে "-" বা অন্য কোনও অক্ষর থাকে et নেট অনুমতি দেয় না, আপনি এর মতো কিছু করতে পারেন:

public string Test([FromHeader]string host, [FromHeader(Name = "Content-Type")] string contentType)
{
}

5

আমার ক্ষেত্রে কাজ করা কোডগুলির এই লাইনটি ব্যবহার করে দেখুন:

IEnumerable<string> values = new List<string>();
this.Request.Headers.TryGetValues("Authorization", out values);

2

WEB API 2.0 এর জন্য:

এর Request.Content.Headersপরিবর্তে আমাকে ব্যবহার করতে হয়েছিলRequest.Headers

এবং তারপরে আমি নীচের মতো একটি উত্সাহ ঘোষণা করলাম

  /// <summary>
    /// Returns an individual HTTP Header value
    /// </summary>
    /// <param name="headers"></param>
    /// <param name="key"></param>
    /// <returns></returns>
    public static string GetHeader(this HttpContentHeaders headers, string key, string defaultValue)
    {
        IEnumerable<string> keys = null;
        if (!headers.TryGetValues(key, out keys))
            return defaultValue;

        return keys.First();
    }

এবং তারপর আমি এইভাবে এটি প্রার্থনা।

  var headerValue = Request.Content.Headers.GetHeader("custom-header-key", "default-value");

আমি আশা করি এটি সহায়ক হতে পারে


0

আপনার বর্তমান অপারেশন কনটেক্সট থেকে এইচটিটিপিআরকুয়েস্টমেসেজ নেওয়া দরকার। অপারেশনকন্টেক্সট ব্যবহার করে আপনি এটি এর মতো করতে পারেন

OperationContext context = OperationContext.Current;
MessageProperties messageProperties = context.IncomingMessageProperties;

HttpRequestMessageProperty requestProperty = messageProperties[HttpRequestMessageProperty.Name] as HttpRequestMessageProperty;

string customHeaderValue = requestProperty.Headers["Custom"];

0

জিইটি পদ্ধতিতে .NET কোর জন্য, আপনি এটি এর মতো করতে পারেন:

 StringValues value1;
 string DeviceId = string.Empty;

  if (Request.Headers.TryGetValue("param1", out value1))
      {
                DeviceId = value1.FirstOrDefault();
      }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.