C# 如何制作一个ASP.NET MVC控制器,它可以接收来自外部站点的请求?

C# 如何制作一个ASP.NET MVC控制器,它可以接收来自外部站点的请求?,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我想要一个像这样的控制器 public ActionResult UnlockAssets ( string psd ) { // ... } 外部站点可以调用并从中返回JSON。这可能吗?如果是这样,我从哪里开始?是的,例如,外部站点可能会通过Ajax调用您的控制器 外部站点将具有一个带有Ajax的Javascript函数,该函数将调用url: http://www.yourwebsite.com/yourcontrollername/UnlockAssets?psd=value

我想要一个像这样的控制器

public ActionResult UnlockAssets ( string psd ) 
{
    // ... 
}

外部站点可以调用并从中返回JSON。这可能吗?如果是这样,我从哪里开始?

是的,例如,外部站点可能会通过Ajax调用您的控制器

外部站点将具有一个带有Ajax的Javascript函数,该函数将调用url:

http://www.yourwebsite.com/yourcontrollername/UnlockAssets?psd=value
您的响应可以是JSON,您可以使用ActionResult签名并返回JSON,但格式可能已关闭,并且标头响应标头可能不正确,因为您没有向请求者/客户机发出JSON响应

因此,这将是适用于控制器的正确ASP.NET MVC签名方法

[HttpGet] //or [HttpPost] or both
public JsonResult UnlockAssets ( string psd ) 
{
    return Json(new { foo = "blah"}); 
    //or
    return Json(someinstanceofaclassofyours); 
}
您不需要像某人建议的那样使用Web API,您可能更喜欢Web API,但实际上它只取决于什么适合您、您的时间表、您的客户机在调用服务器时需要什么,等等,您的体系结构的复杂性,以及客户机需求的复杂性

一个普通的ASP.NET MVC应用程序控制器可以在简单的体系结构(甚至是复杂的体系结构)中充当“API”,并且可以很好地满足外部客户端的需求。该控制器可以为ASP.NET MVC站点提供服务器视图,并将JSON返回给外部调用方。如果该控制器看起来是组织架构的正确方法,那么它就很好了

当你做出架构决策时,你可能会认为当你为客户建立一个实际的API时,WEB API更合适,这个API会有文档,为客户端调用者展示各种方法,很健壮。WebAPI还可以用于客户端调用的简单方法。没有正确或错误的选择,它只是一个工作的正确工具


我想说的是,如果你已经在ASP.NET MVC应用程序中交织了模型、实体框架,并且你有了一个试图向外部客户机公开的方法,你不会看到你的MVC应用程序快速增长并失控,只要使用一个控制器就行了。否则,可以通过将Web API添加到现有的MVC项目中,或者最好将新的Web API项目添加到解决方案中来使用Web API。

您可能需要一个Web API()

这里有一个简单的例子

using System;
using System.Linq;
using System.Net;
using System.Web.Http;


 public class DocumentsController : ApiController
{
    public IHttpActionResult UnlockAssets (string psd )
    {
        var documents = new DocumentRepo();
        if (!documents.Exists(psd))
        {
            return NotFound();
        }else{
            documents.unlock(psd)
            return Ok(product);
        }
    }
}

您的主要障碍将是克服大多数浏览器强制执行的同源策略。你可以从阅读这些内容和解决方案(Cors、JSONP等)开始,我不明白为什么不能使用WebClient或javascript调用方法
yourdomain.com/controller/action
。你不需要WebApi。你可以在MVC中做同样的事情,但是你需要考虑CORS。看一看这个问题()我想它也会是这样的琐碎,我不知道我是否遗漏了一些东西。如果你以前见过的话,它肯定是琐碎的;)