通过C#中的代码调用放置Odata控制器方法

时间:2014-04-15 19:28:02

标签: c# asp.net-mvc odata

我的项目中有一个Odata控制器类,我需要从其他代码段中调用PUT控制器方法。

我的PUT控制器方法的声明如下所示,它接受两个参数和类对象。

public IHttpActionResult Put([FromODataUri] string name, [FromODataUri] string version, Product product)

我可以通过fiddler使用此URL调用此方法,这很好用,现在我需要通过代码调用此Put控制器方法。

https://127.0.0.1/odata/ControllerName(name='ProductName',version=1)

到目前为止,我编写的代码与Put方法配合使用并从URL接受一个Odata参数,但不确定如何使用两个参数。

Container container = new ProductService.Container(baseUri);
container.AttachTo("Products", product);
container.UpdateObject(product);
container.SaveChanges(SaveChangesOptions.ReplaceOnUpdate);

这里,这将调用Put Controller一个参数,传递参数值等于主键,但因为我有两个主键和相同的两个参数接受Put Controller Method。

我应如何从C#代码调用Put控制器方法?

1 个答案:

答案 0 :(得分:0)

这是一个类似的示例项目https://aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/OData/v3/ODataCompositeKeySample/有POST,PATCH方法:

public HttpResponseMessage PutPerson([FromODataUri] string firstName, [FromODataUri] string lastName, Person person)
{
    _repo.UpdateOrAdd(person);

    return Request.CreateResponse(HttpStatusCode.OK);
}

以及调用PATCH的示例:

private static void PatchPerson()
{
    Console.WriteLine("Patch Person");
    Container c = new Container();
    var person = c.People.Where(p => p.FirstName == "Eric" && p.LastName == "Smith").Single();
    person.Age = 9;
    c.UpdateObject(person);
    c.SaveChanges(SaveChangesOptions.PatchOnUpdate);
    Console.WriteLine("\t{0}, {1}'s age is changed to {2}", person.FirstName, person.LastName, person.Age);
    GetPeople();
}

请确保您的实体中有一个复合键,与以下内容相同:

public class Person
{
    [Key]
    public string FirstName { get; set; }
    [Key]
    public string LastName { get; set; }

    public int Age { get; set; }
}