【问题标题】:call internally a method from console application to my web application in C#在 C# 中从控制台应用程序内部调用我的 Web 应用程序的方法
【发布时间】:2017-01-21 04:53:38
【问题描述】:

我需要在 C# 中调用控制台到 Web 应用程序方法。

我的代码在下面-

控制台应用代码:

public static class Program
    {
       public static void Main(String[] args)
        {
         Console.Write("Waiting for call getData method...");
         Console.Read();
        }
    }

网页应用代码:

public class MyController : BaseController
    {

    [HttpGet]
    public string getData(string data)
    {
       return data;
    }
}

我只需要从控制台调用 getData(data) 方法。

请提出建议。

【问题讨论】:

  • 考虑到现实世界的场景,您的 Web 应用程序应该可能在 Web 服务器内独立运行,例如IIS。然后作为客户端的控制台应用程序应该通过@PrasannaKumarJ 正确建议的机制调用公开的 Web 方法。如果您想从字面上将 Web 项目引用到您的控制台应用程序中,那么您可以按照 RIdwan Galib 在他的回答中建议的在 Visual Studio 中添加对项目的引用的标准机制。 Web 项目就像任何其他 C# 项目一样,具有一些附加信息,以便可以将其发布到 Web 服务器。

标签: c# .net


【解决方案1】:

您可以使用 system.net.http 来执行此操作。看看这篇 MSDN 文章。

Calling WebAPI from Console app

不要进入 RunAsync 等等。只需使用 HTTPClient 调用 API。

这是完整的代码示例。 ....................................

using System;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;

namespace HttpClientSample
{
public class Product
{
    public string Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
    public string Category { get; set; }
}

class Program
{
    static HttpClient client = new HttpClient();

    static void ShowProduct(Product product)
    {
        Console.WriteLine($"Name: {product.Name}\tPrice: {product.Price}\tCategory: {product.Category}");
    }

    static async Task<Uri> CreateProductAsync(Product product)
    {
        HttpResponseMessage response = await client.PostAsJsonAsync("api/products", product);
        response.EnsureSuccessStatusCode();

        // return URI of the created resource.
        return response.Headers.Location;
    }

    static async Task<Product> GetProductAsync(string path)
    {
        Product product = null;
        HttpResponseMessage response = await client.GetAsync(path);
        if (response.IsSuccessStatusCode)
        {
            product = await response.Content.ReadAsAsync<Product>();
        }
        return product;
    }

    static async Task<Product> UpdateProductAsync(Product product)
    {
        HttpResponseMessage response = await client.PutAsJsonAsync($"api/products/{product.Id}", product);
        response.EnsureSuccessStatusCode();

        // Deserialize the updated product from the response body.
        product = await response.Content.ReadAsAsync<Product>();
        return product;
    }

    static async Task<HttpStatusCode> DeleteProductAsync(string id)
    {
        HttpResponseMessage response = await client.DeleteAsync($"api/products/{id}");
        return response.StatusCode;
    }

    static void Main()
    {
        RunAsync().Wait();
    }

    static async Task RunAsync()
    {
        client.BaseAddress = new Uri("http://localhost:55268/");
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        try
        {
            // Create a new product
            Product product = new Product { Name = "Gizmo", Price = 100, Category = "Widgets" };

            var url = await CreateProductAsync(product);
            Console.WriteLine($"Created at {url}");

            // Get the product
            product = await GetProductAsync(url.PathAndQuery);
            ShowProduct(product);

            // Update the product
            Console.WriteLine("Updating price...");
            product.Price = 80;
            await UpdateProductAsync(product);

            // Get the updated product
            product = await GetProductAsync(url.PathAndQuery);
            ShowProduct(product);

            // Delete the product
            var statusCode = await DeleteProductAsync(product.Id);
            Console.WriteLine($"Deleted (HTTP Status = {(int)statusCode})");

        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }

        Console.ReadLine();
    }

}
}

【讨论】:

  • 能否请您为您的答案添加更多上下文。仅链接的答案难以理解,并且如果网站关闭或无法正常工作,很容易变得无效。如果您可以将您所引用的链接/博客中最相关的部分复制到这篇文章本身中,这将对提问者和未来的读者都有帮助。
【解决方案2】:

两者是不同的应用程序,因此您可以添加 Web 应用程序作为控制台应用程序的引用,然后只需创建一个对象来访问 getData(data)

【讨论】:

    猜你喜欢
    • 2016-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 2011-10-29
    • 1970-01-01
    • 2015-01-08
    相关资源
    最近更新 更多