按名称搜索,而不是ID,C#

时间:2019-11-13 21:29:54

标签: c#

我的产品负责人

[server]
port_rpc_admin_local
port_peer
port_ws_admin_local
#port_ws_public
#ssl_key = /etc/ssl/private/server.key
#ssl_cert = /etc/ssl/certs/server.crt

[port_rpc_admin_local]
port = 5005
ip = 0.0.0.0
admin = 127.0.0.1
protocol = http

[port_peer]
port = 51235
ip = 0.0.0.0
# alternatively, to accept connections on IPv4 + IPv6, use:
#ip = ::
protocol = peer

[port_ws_admin_local]
port = 6006
ip = 0.0.0.0
admin = 127.0.0.1
protocol = ws

#[port_ws_public]
#port = 6005
#ip = 0.0.0.0
#protocol = wss

#-------------------------------------------------------------------------------

[node_size]
medium

# This is primary persistent datastore for rippled.  This includes transaction
# metadata, account states, and ledger headers.  Helpful information can be
# found here: https://ripple.com/wiki/NodeBackEnd
# delete old ledgers while maintaining at least 2000. Do not require an
# external administrative command to initiate deletion.
[node_db]
type=RocksDB
path=/data01/rippled/db/rocksdb
open_files=2000
filter_bits=12
cache_mb=256
file_size_mb=8
file_size_mult=2
online_delete=120000
advisory_delete=0

# This is the persistent datastore for shards. It is important for the health
# of the ripple network that rippled operators shard as much as practical.
# NuDB requires SSD storage. Helpful information can be found here
# https://ripple.com/build/history-sharding
#[shard_db]
#path=/data01/rippled/db/shards/nudb
#max_size_gb=500

[database_path]
/data01/rippled/db

# This needs to be an absolute directory reference, not a relative one.
# Modify this value as required.
[debug_logfile]
/var/log/rippled/debug.log

[sntp_servers]
time.windows.com
time.apple.com
time.nist.gov
pool.ntp.org

# To use the XRP test network (see https://ripple.com/build/xrp-test-net/),
# use the following [ips] section:
# [ips]
# r.altnet.rippletest.net 51235

# File containing trusted validator keys or validator list publishers.
# Unless an absolute path is specified, it will be considered relative to the
# folder in which the rippled.cfg file is located.
[validators_file]
validators.txt

# Turn down default logging to save disk space in the long run.
# Valid values here are trace, debug, info, warning, error, and fatal
[rpc_startup]
{ "command": "log_level", "severity": "warning" }

# If ssl_verify is 1, certificates will be validated.
# To allow the use of self-signed certificates for development or internal use,
# set to ssl_verify to 0.
[ssl_verify]
1

在我的索引中,我有

                #
                # rippled -- startup script for rippled
                #
                # chkconfig: - 85 15
                # processname: rippled
                #
                ### BEGIN INIT INFO
                # Provides: rippled
                # Required-Start: $local_fs $remote_fs $network
                # Required-Stop: $local_fs $remote_fs $network
                # Default-Start: 2 3 4 5
                # Default-Stop: 0 1 6
                # Short-Description: start and stop rippled
                ### END INIT INFO
                #
                #
                #PIDFILE="/data01/bitcoin/bitcoind.pid"
                start() {
                        echo -n "Starting rippled: "
                        exec /opt/ripple/bin/rippled --net --conf /etc/opt/ripple/rippled.cfg "$@"
                }

                stop() {
                    echo "shutting down rippled"
                    exec /opt/ripple/bin/rippled stop"
                    RETVAL=$?

                    rm $PIDFILE
                    [ $RETVAL -eq 0 ] && rm -f $PIDFILE
                    return $RETVAL
                }

                force_start() {
                        echo -n "Force starting Bitcoind: "
                        echo -n "Starting rippled: "
                        exec /opt/ripple/bin/rippled --net --conf /etc/opt/ripple/rippled.cfg "$@"
                }

                case "$1" in
                    start)
                        start
                        ;;
                    stop)
                        stop
                        ;;
                    restart)
                        stop
                        sleep 30
                        start
                        ;;
                    force-start)
                        force_start
                        ;;
                    *)
                        echo "Usage:  {start|stop|restart|force-start}"
                        exit 1
                        ;;
                esac
                exit $?```


但是我想按名称而不是ID进行搜索

namespace product2.Controllers
{
public class ProductsController : ApiController
{
    Product[] products = new Product[]
    {
        new Product { Id = 1, Name = "Tomato Soup", Category = "Groceries", Price = 1 },
        new Product { Id = 2, Name = "Yo-yo", Category = "Toys", Price = 3.75M },
        new Product { Id = 3, Name = "Hammer", Category = "Hardware", Price = 16.99M }
    };

    public IEnumerable<Product> GetAllProducts()
    {
        return products;
    }

    public IHttpActionResult GetProduct(int id)
    {
        var product = products.FirstOrDefault((p) => p.Id == id);
        if (product == null)
        {
            return NotFound();
        }
        return Ok(product);
    }
}
}

不起作用,我怀疑是product.FirstOrDefault是问题的一部分,但是我已经尝试过products.Any,但是当我单击时,它仅显示未定义的$ undefined(function formatItem(item){       返回item.Name +':$'+ item.Price;     })

1 个答案:

答案 0 :(得分:0)

检查您的WepApiConfig.cs

确保它具有

 public static void Register(HttpConfiguration config)
    {
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: 
"api/{controller}/{name}",
            defaults: new { name = RouteParameter.Optional }
        );
    }

这是您的ProductsController

  public IHttpActionResult GetProduct(string name)
    {
        var product = products.FirstOrDefault((p) => p.Name == name);
        if (product == null)
        {
            return NotFound();
        }
        return Ok(product);
    }

然后使用原始文件作为您的index.html

 $(document).ready(function () {
  // Send an AJAX request
  $.getJSON(uri)
      .done(function (data) {
        // On success, 'data' contains a list of products.
        $.each(data, function (key, item) {
          // Add a list item for the product.
          $('<li>', { text: formatItem(item) }).appendTo($('#products'));
        });
      });
});

function formatItem(item) {
  return item.Name + ': $' + item.Price;
}

function find() {
  var id = $('#prodId').val();
  $.getJSON(uri + '/' + id)
      .done(function (data) {
        $('#product').text(formatItem(data));
      })
      .fail(function (jqXHR, textStatus, err) {
        $('#product').text('Error: ' + err);
      });
}