繁体   English   中英

从另一个Web API调用Web API

[英]Calling web api from another web api

我是JSON和Web API的新手。 我创建了一个名为AdminService的服务,它具有一个get方法。 请参见下面的get方法:

[Route("{iUserId:long}/{iSegmentId:long}/GetUserSegmentItemBySegmentIdAndUserId")]
        public IEnumerable<spADGetUserSegmentItemBySegmentIdAndUserId> GetUserSegmentItemBySegmentIdAndUserId(long iUserId, long iSegmentId)
        {
            using (ADMINEntities context = new ADMINEntities())
            {
                var usibsu = context.spADGetUserSegmentItemBySegmentIdAndUserId(iUserId, iSegmentId);
                if (usibsu != null) return usibsu.ToList();
                throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound));
            }
        }

该服务正常运行。 现在,我有另一个名为TestService的服务,我想在其中调用在adminservice中创建的get方法。 下面是我的代码:

using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using Newtonsoft.Json;
using NPAService.Models;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
using System.Web;
using System.Web.Mvc;

namespace NPAService.Controllers
{
    public class HomeController : Controller
    {
        private string ServiceURLBase = ConfigurationManager.AppSettings["AdminUrl"];

        public ActionResult Index()
        {
            return View();
        }

        private void MoveImageFiles()
        {
            DirectoryInfo dirInfo = new DirectoryInfo(Server.MapPath("~/Reports/"));
            List<String> FileNames = new List<string>();

            for (int i = 0; i < dirInfo.GetFiles().Length; i++)
            {
                FileNames.Add(dirInfo.GetFiles()[i].FullName);
            }

            for (int i = 0; i < FileNames.Count; i++)
            {
                FileInfo fileInfo = new FileInfo(FileNames[i]);
                //Delete file if it is older than five minutes
                if (DateTime.Now.Subtract(fileInfo.CreationTime).TotalMinutes > 1.0)
                {
                    System.IO.File.Delete(fileInfo.FullName);
                    //if the file exists at the destination folder, delete it as well
                    if (System.IO.File.Exists(Server.MapPath("~/Home/images/") + fileInfo.Name))
                    {
                        System.IO.File.Delete(Server.MapPath("~/Home/images/") + fileInfo.Name);
                    }
                }
                else //Copy file to where it can get displayed on the report if it is less than 5 minute old
                {
                    if (!System.IO.File.Exists(Server.MapPath("~/Home/images/") + fileInfo.Name))
                    {
                        System.IO.File.Copy(fileInfo.FullName, Server.MapPath("~/Home/images/") + fileInfo.Name);
                    }
                }
            }
        }

        public string GetUserDataSegment(long iUserId, long iSegmentId)
        {
            string ListString = string.Empty;

            var userdata = new UserData();

            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri(ServiceURLBase);
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                var response = client.GetAsync(iUserId + "/" + iSegmentId + "/GetUserSegmentItemBySegmentIdAndUserId").Result;
                if (response.IsSuccessStatusCode)
                {

                    var data = response.Content.ReadAsStringAsync();
                    var product = JsonConvert.DeserializeObject<UserData>(data);



                    //foreach (var str in data)
                    //{
                    //ListString = str.MyList;
                    //if (iSegmentId == 1) //'Depot'
                    //{
                    //    ListString = ("iRegionId IN (" + str.MyList + ")");
                    //}
                    //else if (iSegmentId == 2) //'BDC'
                    //{

                    //}
                    //else if (iSegmentId == 3) //'LPGMC'
                    //{

                    //}
                    //else if (iSegmentId == 4) //'Region'
                    //{
                    //    ListString = ListString + (" and iRegionId IN (" + str.MyList + ")");
                    //}
                    //else if (iSegmentId == 5) //'OMC'
                    //{
                    //    ListString = ListString + (" and iOMCId IN (" + str.MyList + ")");
                    //    ListString = "";
                    //}
                    //else if (iSegmentId == 6) //'Zone'
                    //{

                    //}
                    //}
                }
            }
            return ListString;
        }





        [System.Web.Mvc.HttpGet]
        public ActionResult OutletReportListing(long lngCompanyId, string strszITSfromPersol,
            string strsQuery1, string strsQuery2, string strsQuery3, string strsQuery4,
            string strPicHeight, string strPicWeight, string strCompany, long iUserId, string type)
        {
            string Username = Convert.ToString(ConfigurationManager.AppSettings["username"]);
            string Password = Convert.ToString(ConfigurationManager.AppSettings["password"]);
            string Servername = Convert.ToString(ConfigurationManager.AppSettings["DSN"]);
            string Databasename = Convert.ToString(ConfigurationManager.AppSettings["databasename"]);
            //GetUserDataSegment(iUserId, 5).Wait();
            //var myObjList = JSON.Deserialize<List<GetUserDataSegment>>(iUserId, 5);
            //var objResponse1 =
            //        JsonConvert.DeserializeObject<List<UserData>>(iUserId, 5);

            string strOMC = GetUserDataSegment(iUserId,5);
            string strRegion = GetUserDataSegment(iUserId, 4);

            ReportDocument reportdocument = new ReportDocument();
            reportdocument.Load(Server.MapPath("~/Reports/rptNPAOutletListing.rpt"));
            reportdocument.SetDatabaseLogon(Username, Password, Servername, Databasename);
            reportdocument.SetParameterValue("@iCompanyId", lngCompanyId);
            reportdocument.SetParameterValue("@szITSfromPersol", strszITSfromPersol);
            reportdocument.SetParameterValue("@szQuery1", strsQuery1);
            reportdocument.SetParameterValue("@szQuery2", strsQuery2);
            reportdocument.SetParameterValue("@szQuery3", strOMC);      //strOMC
            reportdocument.SetParameterValue("@szQuery4", strRegion);   //strRegion
            reportdocument.SetParameterValue("@szPicHeight", strPicHeight);
            reportdocument.SetParameterValue("@szPicWeight", strPicWeight);
            reportdocument.SetParameterValue("@szCompany", strCompany);

            ExportFormatType formtType = ExportFormatType.HTML40;
            string ExportName = "NPAReport.html";
            string ExportMimeType = "text/html";

            if (type.Trim().ToLower().Equals("view"))
            {
                formtType = ExportFormatType.HTML40;
                ExportName = "NPAReport.html";
                ExportMimeType = "text/html";
            }
            else if (type.Trim().ToLower().Equals("pdf"))
            {
                formtType = ExportFormatType.PortableDocFormat;
                ExportName = "NPAReport.pdf";
                ExportMimeType = "application/pdf";
            }
            else if (type.Trim().ToLower().Equals("doc"))
            {
                formtType = ExportFormatType.WordForWindows;
                ExportName = "NPAReport.doc";
                ExportMimeType = "application/msword";
            }
            else if (type.Trim().ToLower().Equals("rtf"))
            {
                formtType = ExportFormatType.RichText;
                ExportName = "NPAReport.rtf";
                ExportMimeType = "application/rtf";
            }
            else if (type.Trim().ToLower().Equals("xls"))
            {
                formtType = ExportFormatType.Excel;
                ExportName = "NPAReport.xls";
                ExportMimeType = "application/vnd.ms-excel";
            }
            reportdocument.ExportToDisk(formtType, Server.MapPath("~/Reports/" + ExportName));

            MoveImageFiles();
            return File(Server.MapPath("~/Reports/" + ExportName), ExportMimeType);
        }
    }
}

如您所见,我想在我的api项目中生成一个报告文件。 但是我遇到的第一个错误是:无法从“ System.Threading.Tasks.Task”转换为“ string”

我做了很多研究,但似乎没有一个可行。 任何帮助或解释将不胜感激。 谢谢。

response.Content.ReadAsStringAsync();

异步调用返回Task<T> 当您想读取字符串时,可以调用.Result属性,并获得该字符串。 还有一种使异步调用同步的方法。 当您调用异步方法时,您的方法将无法执行,并且方法的调用方将继续执行。 异步调用完成后,您的方法将在异步方法之后立即继续执行。 同样,由于您从GetUserDataSegment方法调用async方法,因此它也需要标记为async

暂无
暂无

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

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