我想要一个像
这样的控制器public ActionResult UnlockAssets ( string psd )
{
// ...
}
外部站点可以调用并返回JSON。这可能吗?如果是这样,我从哪里开始?
答案 0 :(得分:3)
您可能需要Web API(http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your-first-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);
}
}
}
答案 1 :(得分:2)
是的,外部站点可能会通过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返回给外部调用者。如果控制器看起来像是组织架构的正确方法,那就好了。
在做出架构决策时,您可能会认为Web API在构建客户端要使用的实际API时更合适,此API将具有文档,为客户端调用者公开各种方法,是健壮的。 Web API也可用于客户端调用的简单方法。没有正确或错误的选择它更适合这项工作。
我想说,如果你有模型,实体框架已经在ASP.NET MVC应用程序中交织在一起,而你只是有一个尝试向外部客户端公开的方法,那么你看不到你的MVC应用程序快速增长失控,只需使用控制器。否则,可以通过向现有MVC项目添加Web API或者最好在解决方案中添加新的Web API项目来使用Web API。
答案 2 :(得分:0)
您需要一个Web API。为此,右键单击controllers文件夹并添加Web API控制器ex -
public IEnumerable<Claim> Get()
{
var principal = (User as ClaimsPrincipal);
List<Claim> claimsList = new List<Claim>();
foreach (var claim in principal.Claims)
{
claimsList.Add(claim);
}
return claimsList;
}
然后,如果没有自动生成,则需要添加WebAPI.config文件,并将以下代码添加到其中。
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultDataApi",
routeTemplate: "Api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
在global.asax.cs
中的Application_Start()方法中添加以下行GlobalConfiguration.Configure(WebApiConfig.Register);
确保在
之前添加上面的行RouteConfig.RegisterRoutes(RouteTable.Routes)
否则它将无效。 现在您的外部站点只需要访问该控制器的URL。希望能解决问题