我尝试使用Web API返回项目列表。
这是我的控制器:
public class RecipesController : ApiController
{
/// <summary>
/// Model to get recipes datas
/// </summary>
private readonly RecipeModel _recipeModel = new RecipeModel();
/// <summary>
/// Gets the recipe by division identifier.
/// </summary>
/// <param name="id">The div identifier.</param>
[ActionName("Division")]
public Adoria GetRecipeByDivisionId(int id)
{
return _recipeModel.GetRecipeByDivisionId(id);
}
}
目前,这是由使用JavaScript的ASP页面调用的:
function RedirectToReport(){
var url = $("#valSelectedCheckBox").val(); // url of my web api method
location.href = url;
}
它在浏览器上显示xml文件。
我不想在浏览器上显示它,而是下载它。
您对目的有想法吗?
创建此ActionResult(以便可在应用程序的其他位置重用)。我从http://aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/ActionResults/ActionResults/Results/OkFileDownloadResult.cs开始,此站点有许多有用的示例。
public class OkXmlDownloadResult : IHttpActionResult
{
private readonly ApiController _controller;
public OkXmlDownloadResult(string xml, string downloadFileName,
ApiController controller)
{
if (xml == null)
{
throw new ArgumentNullException("xml");
}
if (downloadFileName == null)
{
throw new ArgumentNullException("downloadFileName");
}
if (controller == null)
{
throw new ArgumentNullException("controller");
}
Xml = xml;
ContentType = "application/xml";
DownloadFileName = downloadFileName;
_controller = controller;
}
public string Xml { get; private set; }
public string ContentType { get; private set; }
public string DownloadFileName { get; private set; }
public HttpRequestMessage Request
{
get { return _controller.Request; }
}
public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
return Task.FromResult(Execute());
}
private HttpResponseMessage Execute()
{
HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
response.Content = new StringContent(Xml);
response.Content.Headers.ContentType = MediaTypeHeaderValue.Parse(ContentType);
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = DownloadFileName
};
return response;
}
}
然后在控制器中使用它(我添加了一种获取XML的简单方法,这取决于您如何生成XML):
public class ValuesController : ApiController
{
public IHttpActionResult Get()
{
User user = new User()
{
FirstName = "First",
LastName = "Last"
};
// Alternative 1
XmlSerializer serializer = new XmlSerializer(typeof(User));
// Alternative 2
// DataContractSerializer serializer = new DataContractSerializer(typeof(User));
StringBuilder builder = new StringBuilder();
using (StringWriter writer = new StringWriter(builder))
{
serializer.Serialize(writer, user);
// alternative 2
// serializer.WriteObject(writer, user);
}
// create XML from your data.
return new OkXmlDownloadResult(builder.ToString(), "myfile.xml", this);
}
}
public class User
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句