简体   繁体   English

如何在MVC4项目中调用/引用外部web api项目

[英]How to call/reference external web api project in MVC4 project


I am new to Web API & MVC 我是Web API和MVC的新手
I have created new WEB API & MVC solution separately now i want to refer Web API action method in MVC so for that following code i written, 我已经单独创建了新的WEB API和MVC解决方案,现在我想在MVC中引用Web API动作方法,以便我编写下面的代码,
Web Api Project Side, Web Api Project Side,

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Data;
using System.Net.Http;
using System.Web.Http;
using AttributeRouting.Web.Mvc;
using RegisterStudent_WebAPI.Models;

    namespace Register_Student_WebAPI.Controllers 
    {
        public class RegisterStudentController : ApiController
        {
            [Route("api/student")]
            [HttpGet]
            public IEnumerable<Student> GetStudents()
            {
                RegisterStudent_API_DB objRegisterStudent = new RegisterStudent_API_DB();
                List<Student> lstStudent = objRegisterStudent.GetStudent();
                return lstStudent ;
            }
        } }

WEB.Config File from API, 来自API的WEB.Config文件,

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;


namespace RegisterStudent_WebAPI
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {


            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

            // Uncomment the following line of code to enable query support for actions with an IQueryable or IQueryable<T> return type.
            // To avoid processing unexpected or malicious queries, use the validation settings on QueryableAttribute to validate incoming queries.
            // For more information, visit http://go.microsoft.com/fwlink/?LinkId=279712.
            //config.EnableQuerySupport();

            // To disable tracing in your application, please comment out or remove the following line of code
            // For more information, refer to: http://www.asp.net/web-api
            config.EnableSystemDiagnosticsTracing();


            config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new System.Net.Http.Headers.MediaTypeHeaderValue("text/html"));
        }
    }
}


in MVC Project i have written following code in script tag(on load form) to refer WEB API Service, 在MVC项目中我已经在脚本标签(在加载表单上)编写了以下代码来引用WEB API服务,

$(document).ready(function () {   
        jQuery.support.cors = true;
        $.ajax({
            url: 'http://localhost:18715/api/student',
            type: 'GET',
            dataType: 'json',
            success: function (data) {
                alert('success');
            },
            error: function (x) {
                alert(x.status);
            }
        });
    });

If i add reference of Web API project to MVC project then it's working fine but one of my friend told services should not be referred like that, Please guide me how to refer/include the hosted/cross domain running web api project to my MVC Project? 如果我将Web API项目的引用添加到MVC项目然后它工作正常但我的一个朋友告诉服务不应该被这样引用,请指导我如何引用/包含运行web api项目的托管/跨域项目到我的MVC项目?

What you have done is not bad(at least - it is not forbidden ;)) but by referencing WebAPI directly in a MVC project you are binding it to the one, specific application, what will prevent you from reusing API in other projects/services. 你所做的一切都不错(至少 - 它不被禁止;))但是通过直接在MVC项目中引用WebAPI,你将它绑定到一个特定的应用程序,什么将阻止你在其他项目/服务中重用API 。

In my opinion, WebAPI project should be hosted as another application(it is up to you whether it should be a self-hosted OWIN application/webservice/simple API application), what gives you some benefits: 在我看来,WebAPI项目应该作为另一个应用程序托管(它取决于你是否应该是一个自托管的OWIN应用程序/ webservice / simple API应用程序),它给你一些好处:

  • it is separated from your MVC application logic 它与您的MVC应用程序逻辑分开
  • it can be deployed separately 它可以单独部署
  • it can be used by other applications/services 它可以被其他应用程序/服务使用
  • it is easier to maintain 它更容易维护

Think of WebAPI as a RESTful webservice, an API which can be used by your applications or third-party applications. 将WebAPI视为RESTful Web服务,可以由应用程序或第三方应用程序使用的API。

To be honest using WebAPI directly in MVC just to feed your views some data seems like a little waste. 老实说,直接在MVC中使用WebAPI只是为了提供你的观点,一些数据似乎有点浪费。 What you are doing can be done thanks to JsonResult actions in your MVC controller. 由于MVC控制器中的JsonResult操作,您正在做的事情可以完成。 It is not ideal, but prevents you from creating another API project. 它并不理想,但会阻止您创建另一个API项目。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM