একটি বিদ্যমান এএসপি.নেট এমভিসি 4 ওয়েব অ্যাপ্লিকেশন প্রকল্পে কীভাবে ওয়েব এপিআই যুক্ত করবেন?


365

আমি একজন যুক্ত করতে চান ASP.NET ওয়েব এপিআই ভিসুয়াল স্টুডিও 2012 কোনটি পদক্ষেপ আমি প্রকল্পের জন্য একটি কার্যকরী ওয়েব এপিআই যোগ করার জন্য পালন করা আবশ্যক উন্নত একটি ASP.NET MVC 4 ওয়েব অ্যাপ্লিকেশন প্রজেক্টে? আমি সচেতন যে আমার এপি কন্ট্রোলার থেকে প্রাপ্ত একটি নিয়ামক প্রয়োজন তবে এটি আমার জানা সমস্ত বিষয়।

আমার আরও বিশদ সরবরাহ করার প্রয়োজন থাকলে আমাকে জানান।

উত্তর:


455

আমার সম্পাদন করার জন্য প্রয়োজনীয় পদক্ষেপগুলি হ'ল:

  1. রেফারেন্স যুক্ত করুন System.Web.Http.WebHost
  2. যুক্ত করুন App_Start\WebApiConfig.cs(নীচে কোড স্নিপেট দেখুন)।
  3. আমদানি নামস্থান System.Web.Httpমধ্যে Global.asax.cs
  4. ফোন করুন WebApiConfig.Register(GlobalConfiguration.Configuration)মধ্যে MvcApplication.Application_Start()(ফাইলের মধ্যে Global.asax.cs), সামনে যে ডিফল্ট ওয়েব অ্যাপ্লিকেশন রুট নিবন্ধনের অন্যথায় প্রাধান্য গ্রহণ করা হবে।
  5. থেকে প্রাপ্ত একটি নিয়ামক যুক্ত করুন System.Web.Http.ApiController

আমি তখন আমার এপিআই নিয়ামককে সংজ্ঞায়িত করতে টিউটোরিয়াল (আপনার প্রথম এএসপি.নেট ওয়েব এপিআই) থেকে যথেষ্ট শিখতে পারি।

App_Start \ WebApiConfig.cs:

using System.Web.Http;

class WebApiConfig
{
    public static void Register(HttpConfiguration configuration)
    {
        configuration.Routes.MapHttpRoute("API Default", "api/{controller}/{id}",
            new { id = RouteParameter.Optional });
    }
}

Global.asax.cs:

using System.Web.Http;

...

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();

    RegisterGlobalFilters(GlobalFilters.Filters);
    WebApiConfig.Register(GlobalConfiguration.Configuration);
    RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}

আপডেট 10.16.2015:

ওয়ার্ডে এটি রয়েছে, উপরেরটির কাজ করার জন্য নুগেট প্যাকেজ মাইক্রোসফ্ট.এএসপনেট.ওয়েবএপি অবশ্যই ইনস্টল করা উচিত।


12
এটি সত্যিই সহায়ক ছিল। আমাকে System.Net.Httpপাশাপাশি একটি রেফারেন্স যোগ করতে হয়েছিল, তবে সেগুলি বাদ দিয়ে এটি একটি কবজির মতো কাজ করেছিল!
ক্রিস্টোফার এলিয়াসন

5
আমি এমভিসি 3 থেকে 4 টিতেও একটি প্রকল্প আপগ্রেড করেছি এবং সিস্টেম.ওয়েব.এইচটিটিপিতে একটি রেফারেন্স যুক্ত করা দরকার।
ড্যামিয়েন সাওয়ের

3
আপনি এখনই নুগেট ব্যবহার করতে পারেন, এবং যে কোনও পরিবর্তন ঘটে তার শীর্ষে থাকতে পারেন! nuget.org/packages/Mic Microsoft.AspNet.WebApi
ক্রিস

3
আমি আমার ওয়েব এপিআই রেজিস্টারটিতে পরিবর্তন না করা পর্যন্ত আমি এটি কাজ করব না: GlobalConfigration.Configure (WebApiConfig.Register);
কিংঅফ হাইপোক্রিটস

3
@ লুইসগুভিয়া আমার ধারণা এটি খুব দেরিতে হয়েছে তবে অন্য কেউ সম্ভবত এটি সমাধান করতে পারে যদি আমার যা ছিল এটিই ছিল। GlobalConfiguration.Configure (WebApiConfig.Register); গ্লোবাল.এক্সএক্স-এ রাউটকনফিগের আগে চলে যায় e
ম্যাক্সিম

77

11/22/2013 আপডেট করুন - এটি সর্বশেষতম ওয়েবএপিআই প্যাকেজ:

Install-Package Microsoft.AspNet.WebApi

আসল উত্তর (এটি একটি পুরানো WebApi প্যাকেজ)

Install-Package AspNetWebApi

আরও বিশদ


3
2013 হিসাবে এটি একটি উত্তরাধিকারের প্যাকেজ এবং আপনি Install-Package Microsoft.AspNet.WebApiএখনই চান । Nuget.org/packages/Mic Microsoft.AspNet.WebApi
ক্রিস

70

আমার এমভিসি 5 প্রকল্পে ওয়েবএপিআই যুক্ত করতে।

  1. নিউগেট প্যাকেজ ম্যানেজার কনসোলটি খুলুন এবং রান করুন

    PM> Install-Package Microsoft.AspNet.WebApi
  2. উল্লেখগুলি যুক্ত করুন System.Web.Routing, System.Web.Netএবং System.Net.Httpডিএলএল যদি না ইতিমধ্যে

  3. কন্ট্রোলার ফোল্ডারে রাইট ক্লিক করুন> নতুন আইটেম যুক্ত করুন> ওয়েব> ওয়েব এপিআই কন্ট্রোলার যুক্ত করুন

  4. ওয়েবকনফিগটি ভিএস দ্বারা সেই অনুযায়ী সংশোধিত হবে

  5. Application_Startইতিমধ্যে সেখানে না থাকলে পদ্ধতি যুক্ত করুন

    protected void Application_Start()
    {
        //this should be line #1 in this method
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }
  6. নিম্নলিখিত ক্লাসটি যুক্ত করুন (আমি Global.asax.cs ফাইলে যুক্ত করেছি)

    public static class WebApiConfig
    {
         public static void Register(HttpConfiguration config)
         {
             // Web API routes
             config.MapHttpAttributeRoutes();
    
             config.Routes.MapHttpRoute(
                 name: "DefaultApi",
                 routeTemplate: "api/{controller}/{id}",
                 defaults: new { id = RouteParameter.Optional }
             );
         }
     }
  7. সেই অনুযায়ী ওয়েব এপিআই পদ্ধতিটি পরিবর্তন করুন

    namespace <Your.NameSpace.Here>
    {
        public class VSController : ApiController
        {
            // GET api/<controller>   : url to use => api/vs
            public string Get()
            {
                return "Hi from web api controller";
            }
    
            // GET api/<controller>/5   : url to use => api/vs/5
            public string Get(int id)
            {
                return (id + 1).ToString();
            }
        }
    }
  8. পুনর্নির্মাণ এবং পরীক্ষা

  9. একটি সাধারণ এইচটিএমএল পৃষ্ঠা তৈরি করুন

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>    
        <script src="../<path_to_jquery>/jquery-1.9.1.min.js"></script>
        <script type="text/javascript">
            var uri = '/api/vs';
            $(document).ready(function () {
                $.getJSON(uri)
                .done(function (data) {
                    alert('got: ' + data);
                });
    
                $.ajax({
                    url: '/api/vs/5',
                    async: true,
                    success: function (data) {
                        alert('seccess1');
                        var res = parseInt(data);
                        alert('got res=' + res);
                    }
                });
            });
        </script>
    </head>
    <body>
    ....
    </body>
    </html>

যে পয়েন্টটি একটি পার্থক্য তৈরি করেছিল তা হ'ল ওয়েবএপিকনফিগ.আজিগ্রিকে প্রথম লাইনে স্থাপন করা, যেমন @ খেইয়া উল্লেখ করেছেন
রজত

আমি যুক্ত করতে চাই, আপনার এপিআই কন্ট্রোলারের নামটি কারকন্ট্রোলারের মতো (কেবল গাড়ি নয় ) কন্ট্রোলারের সাথে শেষ হতে হবে !!! তাই অনেকে এটিকে ভুলে যান এবং ত্রুটি বার্তাটি পান "" কোনও ধরণের সন্ধান পাওয়া যায়নি যা "} 0}" নামের নিয়ামকের সাথে মেলে
1_bug

এই দুর্দান্ত উত্তরের সাথে আরও দক্ষ হওয়ার জন্য আপনি 4, 8 এবং 9. পদক্ষেপগুলি উপেক্ষা করতে পারেন (এগুলি অত্যাবশ্যক নয়) এবং আপনি 5 এবং 6 ধাপের ক্রমটি অদলবদল করলে তারা আরও বুদ্ধিমান হবে (তখন একটি শ্রেণি তৈরি করা ভাল is এটি ব্যবহার করুন, ক্লাসটি ব্যবহার না করে তারপরে এটি তৈরি করুন)
হাকান ফস্টিক

আমরা ঠিক কোথায় System.Web.Routing, System.Web.Net এবং System.Net.Http এর রেফারেন্স যুক্ত করছি?
gabed123

28

আপনি কন্ট্রোলার ফোল্ডারের অধীনে একটি "ওয়েবএপিআই কন্ট্রোলার" যুক্ত করার সাথে সাথে ভিজ্যুয়াল স্টুডিও স্বয়ংক্রিয়ভাবে নির্ভরতার যত্ন নেয়;

ভিজুয়াল স্টুডিও 'মাই টেস্টপ্রজেক্ট' প্রকল্পে এএসপি.নেট ওয়েব এপিআই 2 এর জন্য নির্ভরতার পুরো সেট যোগ করেছে।

প্রকল্পের গ্লোবাল.এক্সএক্স.সি ফাইলগুলিতে এএসপি.নেট ওয়েব এপিআই সক্ষম করতে অতিরিক্ত পরিবর্তন প্রয়োজন হতে পারে।

  1. নিম্নলিখিত নাম স্থান উল্লেখ যুক্ত করুন:

    System.Web.Http ব্যবহার করে; System.Web.Routing ব্যবহার করে;

  2. কোডটি যদি ইতিমধ্যে কোনও অ্যাপ্লিকেশন_সার্ট পদ্ধতিটি সংজ্ঞায়িত না করে তবে নীচের পদ্ধতিটি যুক্ত করুন:

    সুরক্ষিত অকার্যকর অ্যাপ্লিকেশন_আরম্ভ ()}}

  3. অ্যাপ্লিকেশন_সার্ট পদ্ধতির শুরুতে নিম্নলিখিত লাইনগুলি যুক্ত করুন:

    GlobalConfiguration.Configure (WebApiConfig.Register);


এটি এখন এটি অর্জনের সবচেয়ে সহজ উপায়।
অ্যাডাম স্মিথ

1
এখানে কাজ করে না। 1. ন্যুগেট: Install-Package Microsoft.AspNet.WebApi2. নতুন আইটেম যুক্ত করুন "ওয়েব এপিআই কন্ট্রোলার ক্লাস (v2.1)"। ফলাফল: API নিয়ামক যোগ কিন্তু পরিবর্তন করে না Application_Start। ওউইনের সাথে।
আরটিওম

2
আপনার vs2015 থাকলে আপডেটটি 3 এবং ওয়েব এপিআই 2 কন্ট্রোলার যুক্ত করা হলে এটি সঠিক উত্তর।
মোডচৌধুরী

এটি 2017 সালে হয়েছিল, তবে আমাকে আমার ওয়েবএপি সমাবেশগুলি আপগ্রেড করতে হয়েছিল। আমিও, ম্যানুয়ালি WebApiConfig বর্গ তৈরি করতে ছিল docs.microsoft.com/en-us/aspnet/web-api/overview/advanced/...
জনি

22

আপনি নীচের চিত্র হিসাবে নুগেট থেকে ইনস্টল করতে পারেন:

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

অথবা, প্যাকেজ ম্যানেজার কনসোলে নীচের কমান্ড লাইনটি চালান:

Install-Package Microsoft.AspNet.WebApi

3
সুতরাং, কন্ট্রোলার যুক্ত করা ছাড়া আমার আর কী করা দরকার? এই কারণেই আমি এই প্রশ্নটি প্রথম স্থানে পোস্ট করেছি, টিউটোরিয়ালটি সত্যিই বলতে পারে না যেহেতু এটি কোনও ওয়েব এপিআই প্রকল্প গ্রহণ করে। আমি একটি API কন্ট্রোলার যুক্ত করেছি, তবে এটি রুটে যায় না।
aknuds1

1
টিউটোরিয়ালটি কোনও বিদ্যমান প্রকল্পে একটি ওয়েব এপিআই যুক্ত করার বিষয়ে তেমন সহায়ক ছিল না, তাই আমার উত্তরটিতে বর্ণিত হিসাবে আমি একটি ওয়েব এপিআই প্রকল্প থেকে এটি বের করেছিলাম।
aknuds1

আমি সম্মত, আপনি ওয়েব অ্যাপ্লিকেশন প্রকল্পের টেম্পলেট ব্যবহার করেন তবে এই প্লাম্বিংটি ইতিমধ্যে ইনস্টল করা আছে বলে মনে হচ্ছে।
লংদা

@ কুওনল: ওয়েব এপিআই সংস্করণ ২.২ এমভিসি ৪ দিয়ে ইনস্টল করা হবে? এটি এমভিসি 4 সমর্থন করে?
থমাস

20

আপনি এমভিসি এবং ওয়েব এপিআই প্রকল্পগুলিকে মার্জ করা শুরু করার আগে আমি এগুলিকে আলাদা প্রকল্প হিসাবে আলাদা করার জন্য কনস এবং পেশাদারদের সম্পর্কে পড়ার পরামর্শ দেব । একটি খুব গুরুত্বপূর্ণ জিনিস (আমার নিজের) প্রমাণীকরণ সিস্টেম, যা সম্পূর্ণ পৃথক different

যদি আপনাকে এমভিসি এবং ওয়েব এপিআই উভয় প্রমাণীকরণের অনুরোধগুলি ব্যবহার করতে হয় তবে আপনার মনে রাখতে হবে যে ওয়েব এপিআইটি বিশ্রামপ্রাপ্ত (সেশন, সাধারণ এইচটিটিপি অনুরোধ ইত্যাদি রাখার দরকার নেই) তবে এমভিসি তা নয়।

বাস্তবায়নের পার্থক্যগুলি সন্ধানের জন্য টেমপ্লেটগুলি থেকে ভিজ্যুয়াল স্টুডিও ২০১৩ তে কেবল 2 টি আলাদা প্রকল্প তৈরি করুন: এমভিসির জন্য একটি এবং ওয়েব এপিআইয়ের জন্য একটি (সৃষ্টির সময় "স্বতন্ত্র প্রমাণীকরণ" চালু করতে ভুলবেন না)। আপনি প্রমাণীকরণকন্ট্রোলারগুলিতে অনেক পার্থক্য দেখতে পাবেন।

সুতরাং, সচেতন হতে হবে।


11

দ্রষ্টব্য: এটি উপরের এই উত্তরটির কেবল একটি সংক্ষেপণ

  1. নিউগেট প্যাকেজ ম্যানেজার কনসোলটি খুলুন এবং রান করুন

    PM> Install-Package Microsoft.AspNet.WebApi
  2. উল্লেখগুলি যুক্ত করুন System.Web.Routing, System.Web.Netএবং System.Net.Httpডিএলএল যদি না ইতিমধ্যে

  3. নিম্নলিখিত ক্লাস যুক্ত করুন

    public static class WebApiConfig
    {
         public static void Register(HttpConfiguration config)
         {
             // Web API routes
             config.MapHttpAttributeRoutes();
    
             config.Routes.MapHttpRoute(
                 name: "DefaultApi",
                 routeTemplate: "api/{controller}/{id}",
                 defaults: new { id = RouteParameter.Optional }
             );
         }
     }
  4. Application_Startইতিমধ্যে সেখানে না থাকলে পদ্ধতি যুক্ত করুন (গ্লোবাল.অ্যাক্স্যাক্স ফাইলগুলিতে)

    protected void Application_Start()
    {
        //this should be line #1 in this method
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }
  5. কন্ট্রোলার ফোল্ডারে রাইট ক্লিক করুন> নতুন আইটেম যুক্ত করুন> ওয়েব> ওয়েব এপিআই কন্ট্রোলার যুক্ত করুন

    namespace <Your.NameSpace.Here>
    {
        public class VSController : ApiController
        {
            // GET api/<controller>   : url to use => api/vs
            public string Get()
            {
                return "Hi from web api controller";
            }  
        }
    }

আমরা ঠিক কোথায় System.Web.Routing, System.Web.Net এবং System.Net.Http এর রেফারেন্স যুক্ত করছি?
gabed123

1
অ্যাড রেফারেন্স ডায়ালগ থেকে, সেই কথোপকথনটি খুলুন এবং as সম্মেলনগুলির নাম অনুসন্ধান করুন, তারা ইতিমধ্যে যুক্ত হওয়ার বড় সম্ভাবনা রয়েছে। (তবে কেবল তা নিশ্চিত করার জন্য)
হাকান ফাস্টিক

অ্যাপ্লিকেশন_সার্ট পদ্ধতিটি কি গ্লোবাল.এক্সএক্স.এস-এ বিশ্বব্যাপী শ্রেণির একটি অংশ হওয়ার কথা?
gabed123

হ্যাঁ, আমি তা প্রমাণ করার জন্য আমার উত্তর আপডেট করেছি, যে আপনি এই নোটটির জন্য
হাকান ফাস্টিক

1
এই টুইটটি আমার পক্ষে সাহায্য করেছে ধন্যবাদ!
সিএসচার

3

উপরের সমাধানটি নিখুঁতভাবে কাজ করে। নীচের ছবিতে প্রদর্শিত প্রজেক্ট টেম্পলেটটি নির্বাচন করার সময় আমি ওয়েব এপিআই বিকল্পটি বেছে নিতে পছন্দ করি

দ্রষ্টব্য: সমাধানটি ভিজ্যুয়াল স্টুডিও 2013 বা ততোধিকের সাথে কাজ করে। আসল প্রশ্নটি ২০১২ সালে জিজ্ঞাসা করা হয়েছিল এবং এটি ২০১ 2016, সুতরাং ভিজ্যুয়াল স্টুডিও 2013 বা তারও বেশি সমাধান সমাধান যুক্ত করুন।

প্রোজেক্ট টেম্পলেট ওয়েব এপিআই অপশন দেখায়


2
আপনি যদি এমন একটি প্রকল্প তৈরি করে যাতে ওয়েব এপিআই জড়িত থাকে তবে ওয়েব এপিআই বিকল্পটি বেছে নেওয়া আরও সহজ হবে। বিকল্পটি উপরের জবাবগুলিতে বর্ণিত সমস্ত প্রয়োজনীয় ফাইল তৈরি করবে।
শঙ্কর কৃষ্ণমূর্তি

এখানে সমস্যাটি ভিজ্যুয়াল স্টুডিও 2012 এবং এমভিসি 4-তে রয়েছে যদিও আপনার সমাধানটি ঠিক আছে, আপনি
ভিসি

এটি একটি ভাল পয়েন্ট এবং আমি ভিএস 2013 এর সাথে উপরের সমাধানটি চেষ্টা করেছি poin
শঙ্কর কৃষ্ণমূর্তি

হাই সব, আমি আমার এমভিসি দ্রবণে কাজ করে এমন এপিআই উপাদান পেয়েছি, কিন্তু ডিফল্ট হিসাবে এটি সমাধানটি একটি এপিআই সমাধান হিসাবে চালানোর চেষ্টা করেছিল। তবে আমি এটি ডিফল্ট হিসাবে এমভিসি সমাধান হিসাবে চালিত করতে চাই এবং তারপরে আপনি যদি এপিআই লোকেশন ইত্যাদিতে যান তবে এপিআই চালান .. অন্য কারও কি এই সমস্যা আছে এবং এটি সমাধান করতে সক্ষম হয়েছেন? ধন্যবাদ
ক্রিস কুপার

1

আমার একই সমস্যা ছিল, সমাধানটি এত সহজ ছিল

"সলসনের জন্য নিউজেট প্যাকেজ পরিচালনা করুন" থেকে মাইক্রোসফ্ট.এএসপি.এনইটি. ওয়েবেএপি ইনস্টল করুন সলিউশনটিতে ডান ক্লিক করুন

বুম এটা যে এটি;)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.